我正在尝试编译BMD工具与定制版本libav 11我~/libav-11.8/build
在 Ubuntu 14.04 下使用 g++ 4.8.4 编译。 bmd 使用 pkg-config 构建 g++ 标志,由于编译在链接阶段失败,我测试了 pkg-config 输出,如下所示:
echo `pkg-config --cflags --libs libavcodec libavformat libswscale libavutil`
这会产生
-I/usr/local/include -pthread -L/usr/local/lib -lavformat -lavcodec
-ldl -lasound -lz -lwscale -lavutil -lm
所以我计算-I
并-L
标记了未设置为自定义构建位置的位置。设置PKG_CONFIG_PATH=~/libav-11.8/build/lib/pkgconfig
并再次运行它产生了
-Ibuild/include -pthread -Lbuild/lib ...<lib flags>
如果我从构建根文件夹运行 g++ ,这将是正确的。 pkg-config 不应该解析为绝对路径而不是相对路径吗?这种行为背后的理由是什么?
答案1
看完之后Freedesktop pkg-config 指南我意识到 pkg-config 没有做任何事情来验证二进制文件、库或路径是否准确。它只吐出文件中写入Libs
的Cflags
内容.pc
。
就我而言,它们是由 libav 的编译过程创建的,并使用传递prefix
给configure
.
prefix
因此,在设置为绝对路径重新编译 libav 后,pkg-config 将输出适合在其他项目的编译中使用的标志-I
。-L