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?


如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
posted @   夜行过客  阅读(693)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
历史上的今天:
2018-08-24 SourceInsight-显示文件完整路径
点击右上角即可分享
微信分享提示