PKG_CONFIG_PATH环境变量

如果以非标准前缀安装软件,请考虑调整PKG_CONFIG_PATH环境变量。 这是什么意思 ?

PKG_CONFIG_PATH是一个环境变量,它指定pkg-config将在其中搜索其.pc文件的其他路径。

此变量用于增加pkg-config的默认搜索路径。 在典型的Unix系统上,它将在目录/usr/lib/pkgconfig/usr/share/pkgconfig 。 这通常包括系统安装的模块。 但是,某些本地模块可能安装在不同的前缀中,例如/usr/local 。 在这种情况下,必须预先设置搜索路径,以便pkg-config可以找到.pc文件。

pkg-config程序用于检索有关系统中已安装库的信息。 pkg-config的主要用途是提供编译程序和链接到库的必要细节。 此元数据存储在pkg-config文件中。 这些文件具有后缀.pc,并驻留在pkg-config工具已知的特定位置。

要检查PKG_CONFIG_PATH值,请使用以下命令:

 echo $PKG_CONFIG_PATH 

要设置PKG_CONFIG_PATH值,请使用:

 export PKG_CONFIG_PATH=/usr/lib/pkgconfig 

要么

 export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig 

第一个答案在技术上不够明确。 从手册页(打开终端,输入man pkg-config ):

pkg-config从特殊元数据文件中检索有关包的信息。 这些文件以包的名称命名,扩展名为.pc 。 在大多数系统上, pkg-config/usr/lib/pkgconfig/usr/share/pkgconfig/usr/local/lib/pkgconfig/usr/local/share/pkgconfig查找这些文件。 它还将查看由PKG_CONFIG_PATH环境变量指定的以冒号分隔的(在Windows上,以分号分隔的)目录列表。

所以pkg-config程序不在PKG_CONFIG_PATH目录中; 但是,如果您安装了一个库,要在可访问的automake脚本中使用它的信息,它需要位于pkg-config知道的目录中。

要查看默认情况下pkg-config(版本0.24或更高版本)搜索已安装库的位置,请使用以下命令:

 pkg-config --variable pc_path pkg-config 

要修改该路径,请设置PKG_CONFIG_PATH环境变量。 man文件状态PKG_CONFIG_PATH是:

用于搜索.pc文件的以冒号分隔的(在Windows上,以分号分隔的)目录列表。 搜索路径后将始终搜索默认目录; 默认值为libdir / pkgconfig:datadir / pkgconfig其中libdir是libdir,其中pkg-config和datadir是安装pkg-config的datadir。

你正试图建立一个软件,比如说Widget。 为了参数,Widget依赖于另一个库libcog。 Widget的构建过程(可能是配置脚本)正在使用pkg-config来确定如何使用libcog。 pkg-config对libcog一无所知。

如果没有安装libcog,那就是你的问题。 标准安装libcog很有可能解决问题。 根据您的系统,您可能需要安装该软件包的附加“开发人员”版本; 它通常在末尾有“-devel”或“-dev”,所以如果你安装“libcog”,你可能还需要安装“libcog-devel”。

如果安装了libcog,它可能没有以pkg-config可以找到它的方式安装。 您的系统上某处可能存在libcog.pc文件。 为了争论,它位于/opt/cog/lib/pkgconfig/libcog.pc。 在这种情况下,您可以通过将PKG_CONFIG_PATH设置为包含libcog.pc的目录来告诉pkg-config。 所以在Bourne shell或类似的东西中

 export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/cog/lib/pkgconfig/ 

一旦完成,重新运行失败的命令将有希望工作。

如果安装了libcog,包括库和头文件,并且你没有libcog.pc文件,那么事情就会变得很糟糕。 据推测,libcog的标准安装包括信息,否则Widget不会依赖它。 我首先调查重新安装libcog。 可以手动创建libcog.pc文件,但正确使用它对于给定的库来说很困难且非常具体。

我查看了我的64位系统上的man-page并且有点困惑。 它在一行中说:

pkg-config从特殊元数据文件中检索有关包的信息。 这些文件以包的名称命名,扩展名为.pc。 默认情况下,pkg-config在目录前缀/ lib / pkgconfig中查找这些文件; 它还将查看由PKG_CONFIG_PATH环境变量指定的以冒号分隔的(在Windows上,以分号分隔的)目录列表。

我曾经假设它在目录lib / pkgconfig中查找。 原来它的目录。 在我的例子中,我试图编译hello world gtk教程。 我找到了我想要的文件,例如

 locate gtk | grep '\.pc' 

其中的结果是:

/usr/lib/x86_64-linux-gnu/pkgconfig/gtk+-3.0.pc

最后是做出口。

 export PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig/ 

在我看来,大多数答案都有太多的信息而不是需要。

一个安装的软件可能(通常会)依赖于某些库和/或标头,系统使用pkg-config来查找它们。

这样说, pkg-config在预定义(默认)系统的目录中查找这些文件。 那些文件夹是“前缀”。 例如,具有前缀/usr/local的库应该在/usr/local/include具有头,并且库本身将在/usr/local/lib 。 但是, pkg-config也会在环境变量PKG_CONFIG_PATH中列出的目录中查找库。

然后,如果您在默认文件夹列表之外安装软件,则必须“调整”列表,即将您的目录添加到PKG_CONFIG_PATH

 $ export PKG_CONFIG_PATH=$PKG_CONFIG_PATH: 

有关详细信息,您可以在 此处查看

这意味着你正在尝试从源代码构建一些东西,它找不到它需要的所有依赖项。 它用于查找这些库的开发文件的pkg-config脚本输出此消息。

我试图安装最新版本的axel,然后运行./configure ,我得到了这个:

 configure: error: Package requirements (openssl) were not met: No package 'openssl' found Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables SSL_CFLAGS and SSL_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. 

所以我尝试过:

 $ pkg-config --cflags openssl 

我得到了:

 Package openssl was not found in the pkg-config search path. Perhaps you should add the directory containing `openssl.pc' to the PKG_CONFIG_PATH environment variable No package 'openssl' found 

很明显我安装了openssl( sudo apt-get install openssl )但是在上面的输出中你可以看到它说“没有包’openssl’找到了”。 所以为了确保我这样做:

 find / -type f -name "*.pc" |& grep -iv permission | grep openssl 

事实certificate我需要一些其他的包,所以有点谷歌搜索,我发现我必须安装这个包:

 sudo apt-get install libssl-dev 

所有这些都与更改pkg-config路径env变量无关。

Interesting Posts