我从 12.04 升级了 Ubuntu 14.04,进行了 dist 升级。过去我手动安装了很多,例如 ffmpeg、libglib 等。我现在有一个很好的自定义发行版,它运行良好,但我在尝试编译应用程序时遇到了问题。它源于源代码中手动安装的软件包与本机发行版库之间的库冲突。一个人建议我重命名/usr/local
它,但下次重新启动时启动失败。
当我查找由pkg-config
with添加的目录时
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
当然,您可以删除。