Kubuntu 21.04编译FFmpeg加--enable-libzmq时找不到libprotokit.a
问题根源
- 你启用了
--pkg-config-flags="--static"参数,pkg-config会返回所有依赖库的静态链接参数 - libzmq的
Requires.private字段依赖norm库,Ubuntu 21.04自带的libnorm-dev包对应的norm.pc配置文件编写不规范:没有用标准的-lprotokit写法,而是直接写死了静态库文件名libprotokit.a,也没有附带库文件所在路径,导致gcc编译测试代码时,只能在当前工作目录查找该文件,无法自动搜索到/usr/lib/x86_64-linux-gnu/下的对应文件 - 你自定义的
PKG_CONFIG_PATH优先读取自己编译的依赖库路径,没有额外添加系统库搜索路径到编译参数里,进一步导致gcc找不到目标文件
解决方法
- 方法1:修改系统
norm.pc配置(最彻底)
编辑/usr/lib/x86_64-linux-gnu/pkgconfig/norm.pc文件,找到Libs字段,把其中的libprotokit.a替换为-L${libdir} -lprotokit,保存后重新执行configure命令即可。 - 方法2:新增系统库路径到编译参数(不修改系统文件)
把configure命令中的--extra-ldflags参数值修改为"-L$HOME/.ffmpeg/build/lib -L/usr/lib/x86_64-linux-gnu",添加系统默认库路径到gcc搜索列表,即可识别到该路径下的libprotokit.a。 - 方法3:编译自定义libzmq(避免依赖问题)
手动编译禁用pgm、norm等可选传输协议的libzmq,安装到$HOME/.ffmpeg/build目录下,configure时会优先使用你自定义的无额外依赖的libzmq,不会触发libprotokit相关的查找逻辑。
内容的提问来源于stack exchange,提问作者razvan
相关产品推荐
相关产品推荐

