windows msys编译64位x264和ffmpeg

举报
风吹稻花香 发表于 2021/06/05 00:06:55 2021/06/05
【摘要】 1. 安装msys msys(Minimal GNU system on Windows),是一个小型的GNU环境,包括基本的bash,make等等。与Cygwin差不多吧, 我也没用过cygwin 下载地址: https://msys2.github.io/ 6.在开始菜单中运行 VS2015 x64 Native Tools Command Prompt ...


1. 安装msys

msys(Minimal GNU system on Windows),是一个小型的GNU环境,包括基本的bash,make等等。与Cygwin差不多吧, 我也没用过cygwin

下载地址: https://msys2.github.io/

6.在开始菜单中运行 VS2015 x64 Native Tools Command Prompt
7.在控制台中运行:
d:\msys64\msys2_shell.cmd -mingw64 -msys -use-full-path

双击mingw64_shell.bat, 进入shell界面。(新的版本也可能没有这个文件了, 自己找找类似的吧).  使用uname -a查看系统信息:


      $ uname -a
      MINGW64_NT-6.1 Galaxy 2.3.0(0.290/5/3) 2015-09-15 09:39 x86_64 Msys
  
 

使用pacman更新系统

pacman –Suy
 

这个命令会同步数据源, 安装最新的msys, 并且安装mingw32和mingw64工具。pacman的使用说明,可以在下面这个网址上查到

https://www.archlinux.org/pacman/pacman.8.html

再次执行uname-a,可以看到系统已经升级到2.5.1了


      $ uname -a
      MSYS_NT-6.1 Galaxy 2.5.1(0.297/5/3) 2016-05-16 10:51 x86_64 Msys
  
 

2. 编译x264

(5)解决libx264所需的依赖库,譬如缺少nasm

pacman -S nasm

 

将x264拷贝到msys64的home目录下, 执行配置脚本


      ./configure --host=mingw64 --enable-static --prefix=/home/x264-bin
  
 

可能会提示下面这样的错误,意思是config.guess和config.sub这两个脚本太旧了,需要重新下载它们


      ./config.guess: unable to guess system type
      This script, last modified 2012-09-25, has failed to recognize
      the operating system you are using. It is advised that you
      download the most up to date version of the config scripts from
        http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
      and
        http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
  
 

按照提示,打开这两个网页,网页的内容分别复制到config.gess和config.sub, 然后再次执行configure命令。这次应该可以成功了,显示如下信息


      platform: X86_64
      byte order: little-endian
      system: WINDOWS
      cli: yes
      libx264: internal
      shared: no
      static: yes
      asm: yes
      interlaced: yes
      avs: avisynth
      lavf: no
      ffms: no
      mp4: no
      gpl: yes
      thread: posix
      opencl: yes
      filters: crop select_every
      debug: no
      gprof: no
      strip: no
      PIC: no
      bit depth: 8
      chroma format: all
      You can run 'make' or 'make fprofiled' now.
  
 

执行make

$ make
 

最终可能编译不过,出现如下的错误:


      libx264.a(cpu.o):cpu.c:(.text+0x631):对‘pthread_num_processors_np’未定义的引用
      libx264.a(cpu.o):cpu.c:(.text+0x631): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `pthread_num_processors_np'
  
 

msys2自带的libpthread.a中没有pthread_num_processors_np这个接口, 所以链接时会提示未定义的符号,解决的方法有两个:

方法1:  禁用thread


      ./configure --host=mingw64 --enable-static --disable-thread --prefix=/home/x264-bin
  
 

方法2: 使用pthread-win32代替系统的libpthread.a。pthreads-win32的官网为

https://sourceware.org/pthreads-win32/

下载最近发布的版本

ftp://sourceware.org/pub/pthreads-win32/dll-latest

下载dll-latest/lib/x64/libpthreadGC2.a,  这是gcc使用的版本

删除msys64/usr/lib/libpthread.a,  使用libpthreadGC2.a来代替,之后应该就可以编译通过

后来又报错:

avisynth_c.h:825:3: error: unknown type name ‘HMODULE’

解决方法:--disable-avs

./configure --host=mingw64 --enable-static --disable-thread --disable-avs --prefix=/home/x264-bin

static只会产生.a文件,不能生产lib和dll动态库。

./configure --host=mingw64 --enable-shared --disable-thread --disable-avs --prefix=/home/x264-bin

生成libx264.lib用:

./configure --host=x86_64-w64-mingw32 --enable-shared --disable-thread --disable-avs --extra-ldflags=-Wl,--output-def=libx264.def

 

--enable-win32thread

make

 

生成“libx264.dll”和“libx264.def”文件之后, 使用VC自带的lib生成工具“LIB”,生成“libx264.lib”文件。使用“Visual Studio command prompt”,切换至x264源代码目录,输入以下命令:

若要生成32位lib文件则输入如下命令:

lib /machine:i386 /def:libx264.def

若要生成64位lib文件则输入如下命令:

lib /machine:X64 /def:libx264.def

即可生成libx264.lib库文件。

正常别人编译的结果:

3.编译ffmpeg

下载最新版本的ffmpeg, (我的版本是2.6.3),  在msys上安装yasm

pacman -S yasm
 

执行configure

 

./configure --toolchain=msvc --enable-shared --disable-static --enable-encoder=libx264 --enable-encoder=mjpeg --enable-encoder=mpeg4 --enable-gpl --disable-debug \

--enable-libx264 --extra-cflags=-I/home/x264-bin/include --extra-ldflags=-LIBPATH:/home/x264-bin/lib --prefix=./out/

现在用的这个:

./configure --toolchain=msvc --enable-shared --enable-static --enable-encoder=libx264 --enable-encoder=mjpeg --enable-encoder=mpeg4 --enable-x86asm --enable-gpl --disable-debug --enable-libx264 --extra-cflags=-I/usr/local/include --extra-ldflags=-LIBPATH:/usr/local/lib --prefix=./out/

make

make install


      ./configure --target-os=win64 \
       --arch=x86_64 \
      --enable-static \
      --enable-memalign-hack \
      --enable-small \
      --enable-version3 \
      --enable-gpl \
      --enable-nonfree \
      --disable-stripping \
      --disable-encoders \
      --disable-decoders \
       	--enable-decoder=h264 \
       	--enable-encoder=libx264 \
       	--enable-encoder=mjpeg \
       	--enable-encoder=mpeg4 \
       	--prefix=./lib \
      --enable-libx264 \
      --extra-cflags="-I/home/x264-bin/include" \
      --extra-ldflags="-L/home/x264-bin/lib"
  
 

 

文章来源: blog.csdn.net,作者:网奇,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/jacke121/article/details/80342237

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。