其他分享
首页 > 其他分享> > FFmpeg-FFmpeg编译时静态链接libwinpthread

FFmpeg-FFmpeg编译时静态链接libwinpthread

作者:互联网

FFmpeg-FFmpeg编译时静态链接libwinpthread

需求是在Windows下编译ffmpeg的可执行档ffmpeg.exe, ffmpeg.exe倒是编译出来了,但是运行时总是报错:

image-20220824105843107

后来搜了一下,是缺少libwinpthread-1.dll 这个库文件,只要把libwinpthread-1.dll 这个文件和ffmpeg.exe这个文件放在一起程序就能正常运行,试了一下,果然如此,

可问题是我不想同时提供这两个文件给别人,所以在想有没有什么办法能把这个动态库打到ffmpeg.exe这个文件里面,这样将来给别人时只要提供ffmpeg.exe这个文件就好了。

尝试了很多次之后,发现了解法,只需要在链接器参数后面加上 -Wl,-Bstatic -lpthread 参数即可。

编译脚本如下:

./configure --prefix=./windows --disable-everything --enable-ffmpeg --enable-protocol=file --enable-demuxer=wav --enable-decoder=pcm* --enable-encoder=aac --enable-muxer=adts --enable-filter=aresample --disable-autodetect --disable-avdevice --disable-swscale  --extra-ldflags='-Wl,-Bstatic -lpthread'

注:我是在Windows下使用MinGW64来编译FFmpeg的

-Wl,-Bstatic

指定后续ld在处理 -l 参数来链接库文件的链接方式首选静态库

-Wl,-Bdynamic

指定后续ld在处理 -l 参数来链接库文件的链接方式首选动态库

例如: -Wl,-Bstatic -la -lb -lc -Wl,-Bdynamic -ld -l e

会被解释成 :ld liba.a libb.a libc.a libd.so libe.so

试了一下,这样即使没有 libwinpthread-1.dll ffmpeg.exe 也能运行成功:

image-20220824110648296

转码也没有问题。

参考链接:

  1. 一次Windows下FFmpeg的编译尝试
  2. how to do static linking of libwinpthread-1.dll in mingw?

标签:enable,FFmpeg,libwinpthread,--,Wl,编译,ffmpeg
来源: https://www.cnblogs.com/yongdaimi/p/16619204.html