pkg-config 标志是相对的

pkg-config 标志是相对的

我正在尝试编译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 没有做任何事情来验证二进制文件、库或路径是否准确。它只吐出文件中写入LibsCflags内容.pc

就我而言,它们是由 libav 的编译过程创建的,并使用传递prefixconfigure.

prefix因此,在设置为绝对路径重新编译 libav 后,pkg-config 将输出适合在其他项目的编译中使用的标志-I-L

相关内容