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查看系统信息:


  
  1. $ uname -a
  2. 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了


  
  1. $ uname -a
  2. 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目录下, 执行配置脚本


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

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


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

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


  
  1. platform: X86_64
  2. byte order: little-endian
  3. system: WINDOWS
  4. cli: yes
  5. libx264: internal
  6. shared: no
  7. static: yes
  8. asm: yes
  9. interlaced: yes
  10. avs: avisynth
  11. lavf: no
  12. ffms: no
  13. mp4: no
  14. gpl: yes
  15. thread: posix
  16. opencl: yes
  17. filters: crop select_every
  18. debug: no
  19. gprof: no
  20. strip: no
  21. PIC: no
  22. bit depth: 8
  23. chroma format: all
  24. You can run 'make' or 'make fprofiled' now.

执行make

$ make
 

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


  
  1. libx264.a(cpu.o):cpu.c:(.text+0x631):对‘pthread_num_processors_np’未定义的引用
  2. 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


  
  1. ./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


  
  1. ./configure --target-os=win64 \
  2. --arch=x86_64 \
  3. --enable-static \
  4. --enable-memalign-hack \
  5. --enable-small \
  6. --enable-version3 \
  7. --enable-gpl \
  8. --enable-nonfree \
  9. --disable-stripping \
  10. --disable-encoders \
  11. --disable-decoders \
  12. --enable-decoder=h264 \
  13. --enable-encoder=libx264 \
  14. --enable-encoder=mjpeg \
  15. --enable-encoder=mpeg4 \
  16. --prefix=./lib \
  17. --enable-libx264 \
  18. --extra-cflags="-I/home/x264-bin/include" \
  19. --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个月内不可修改。