ken*_*enn 6 linux compiling make libraries pkg-config
我已经从 12.04 升级了 Ubuntu 14.04,进行了 dist-upgrades。以前做过很多手动安装,比如ffmpeg、libglib等。我现在有一个不错的自定义发行版,它运行良好,但是在尝试编译应用程序时遇到了问题。它源于手动安装的源代码包和本机发行版库之间的库冲突。一个人建议我重命名/usr/local
它,但在下次重新启动时启动失败。
当我查找由pkg-config
with添加的目录时
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
寻找的路径?
中的内容/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
当然,您可以删除。
归档时间: |
|
查看次数: |
6845 次 |
最近记录: |