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

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

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

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

  pkg-config --variable pc_path pkg-config

它列出了

 /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

我不想让它寻找路径/usr/local/lib...

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

答案1

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

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

是 libdir/pkgconfig:datadir/pkgconfig 其中库目录是 pkg-config 的 libdir 和 数据目录 是 pkg-config 的 datadir当它被安装时。

这意味着它们是在其中编译的。我注意到它在 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

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


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

> pkg-config --libs alsa
-lasound

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

> PKG_CONFIG_PATH=/opt/bs/pkg pkg-config --libs alsa
-foobar

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

相关内容