Ubuntu下Qt5.10项目链接FFmpeg静态库失败问题求助
结合你描述的Ubuntu下编译FFmpeg(带libvpx、禁用x86asm)以及Qt项目配置的情况,链接时出现x86_64相关错误,大概率是以下几个环节没处理到位,逐个排查试试:
调整库的链接顺序:FFmpeg的各个库存在明确的依赖关系,链接器是按顺序解析符号的,你的.pro里的库顺序可能不对,而且漏掉了
libvpx的链接。正确的顺序应该是从上层依赖到下层依赖,修改LIBS配置为:LIBS += -L/usr/local/lib -lavformat -lavcodec -lvpx -lavutil -lz -lpthread -lm这里补充了
-lvpx(因为你编译时启用了libvpx),以及-lz(zlib)、-lpthread(线程库)、-lm(数学库)这些FFmpeg依赖的系统基础库。确保优先使用自定义编译的FFmpeg库:Ubuntu系统可能预装了FFmpeg的库,链接器可能优先找系统默认路径(比如/usr/lib)里的库,而非你编译的/usr/local/lib。可以在.pro里添加链接器参数强制指定路径优先级:
LIBS += -Wl,-Bstatic -L/usr/local/lib -lavformat -lavcodec -lvpx -lavutil -Wl,-Bdynamic -lz -lpthread -lm用
-Wl,-Bstatic和-Wl,-Bdynamic明确区分静态库和动态系统库的链接范围,避免混用到系统自带的FFmpeg动态库。检查FFmpeg静态库的完整性:确认你编译的静态库确实包含了libvpx的相关符号,执行以下命令验证:
nm /usr/local/lib/libavcodec.a | grep vpx如果能看到大量vpx相关的符号(比如
vpx_encode_frame之类的),说明libvpx已经正确编译进FFmpeg了;如果没有,可能是你编译FFmpeg时libvpx没安装或configure没检测到,需要重新编译FFmpeg,确保编译前已经安装libvpx的开发包(sudo apt install libvpx-dev),再重新运行configure和make。匹配Qt的构建模式与FFmpeg编译模式:如果你Qt项目用的是Debug模式,但FFmpeg默认是用Release模式编译的,可能会出现符号不匹配的链接错误。先切换Qt项目到Release模式试试,如果确实需要Debug模式,编译FFmpeg时要加上
--enable-debug配置项重新编译。
内容的提问来源于stack exchange,提问作者user8057102

