FFmpeg-FFmpeg编译时静态链接libwinpthread
需求是在Windows下编译ffmpeg的可执行档ffmpeg.exe, ffmpeg.exe倒是编译出来了,但是运行时总是报错:
后来搜了一下,是缺少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 也能运行成功:
转码也没有问题。
参考链接:
标签:enable,FFmpeg,libwinpthread,--,编译,ffmpeg From: https://www.cnblogs.com/yongdaimi/p/16619204.html