如何排除“ pkg-config --variable pc_path pkg-config”中列出的一些库路径?

ken*_*enn 6 linux compiling make libraries pkg-config

我已经从 12.04 升级了 Ubuntu 14.04,进行了 dist-upgrades。以前做过很多手动安装,比如ffmpeg、libglib等。我现在有一个不错的自定义发行版,它运行良好,但是在尝试编译应用程序时遇到了问题。它源于手动安装的源代码包和本机发行版库之间的库冲突。一个人建议我重命名/usr/local它,但在下次重新启动时启动失败。

当我查找由pkg-configwith添加的目录时

  pkg-config --variable pc_path pkg-config
Run Code Online (Sandbox Code Playgroud)

它列出

 /usr/local/lib/i386-linux-gnu/pkgconfig:/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:/usr/lib/i386-linux-gnu/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig
Run Code Online (Sandbox Code Playgroud)

我不希望它寻找路径 /usr/local/lib...

我怎样才能禁止那些不让pkg-config寻找的路径?

gol*_*cks 3

中的内容/usr/local通常会取代 中的内容/usr,所以我有点困惑为什么要在那里安装库以获得“一个不错的自定义发行版”,但又不想针对它们进行编译。这些是系统将实际使用的库。

无论如何,man pkg-config声明基本搜索路径:

是 libdir/pkgconfig:datadir/pkgconfig 其中libdir是 pkg-config 的 libdir, datadir是安装时 pkg-config 的数据目录。

这意味着它们是在其中编译的。我注意到它在 ubuntu 上与 fedora 上有所不同——前者很长且具有包容性,而后者则简短且具有排他性;在 Fedora 上我必须设置一个$PKG_CONFIG_PATH来包含/usr/local.

由于首先$PKG_CONFIG_PATH检查路径,您可以设置:

PKG_CONFIG_PATH=/usr/lib/i386-linux-gnu/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig
Run Code Online (Sandbox Code Playgroud)

事实上,这些位于内置路径的末尾并不重要;如果检查到达那里没有发现任何东西,那么就什么也找不到。


为了演示其工作原理,请创建一个临时目录/opt/bs/pkg并将.pc文件从默认路径中的目录之一复制到其中 - 例如,alsa.pc. 首先检查;

> pkg-config --libs alsa
-lasound
Run Code Online (Sandbox Code Playgroud)

现在进入/opt/bs/pkg/alsa.pc并更改-lasound(它在Libs:字段中)为-foobar. 设置$PKG_CONFIG_PATH并重试:

> PKG_CONFIG_PATH=/opt/bs/pkg pkg-config --libs alsa
-foobar
Run Code Online (Sandbox Code Playgroud)

Eureka,$PKG_CONFIG_PATH已经覆盖了内置路径....../opt/bs/pkg当然,您可以删除。