Answers:
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
知道该目录中。
/usr/local/lib/x86_64-linux-gnu
被免费作为自动搜索位置(带有空PKG_CONFIG_PATH
),并且确实有很多.pc
文件-值得注意的是GTK +等。- 住在那里。原因是要同时启用一个程序包的多体系结构可用性,如下所述:askubuntu.com/questions/449348/…–
pkg-config
将在您的系统上搜索的默认路径:askubuntu.com/a/373217/436580
要查看默认情况下pkg-config(0.24版或更高版本)在哪里搜索已安装的库,请使用以下命令:
pkg-config --variable pc_path pkg-config
要修改该路径,请设置PKG_CONFIG_PATH
环境变量。man文件状态PKG_CONFIG_PATH
为:
用冒号分隔(在Windows中,用分号分隔)的目录列表,以搜索.pc文件。搜索路径后,始终会搜索默认目录。默认值为libdir / pkgconfig:datadir / pkgconfig,其中libdir是libdir,其中pkg-config,datadir是安装pkg-config的datadir。
echo $(pkg-config --variable pc_path pkg-config)${PKG_CONFIG_PATH:+:}${PKG_CONFIG_PATH}
PKG_CONFIG_PATH
,但仍然具有默认的搜索目录,另外设置一个非空白值不会清除默认值。
您正在尝试构建软件,比方说Widget。窗口小部件依赖于另一个库libcog以作为参数。窗口小部件的构建过程(可能是配置脚本)正在使用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。因此,在伯恩贝壳或类似的东西中
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/cog/lib/pkgconfig/
完成后,重新运行失败的命令有望成功。
如果安装了libcog(包括库和头文件),并且您没有libcog.pc文件,那么情况会很糟糕。大概是标准安装的libcog包含了该信息,否则Widget不会依赖它。我首先要研究重新安装libcog。可以手动创建libcog.pc文件,但是正确处理它是困难的,并且高度特定于给定的库。
我查看了64位系统上的手册页,感到有些困惑。它说了一行:
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/
man
页面如何简化现代的,具有多体系结构的系统。我有些困惑,因为在Debian 8 x86上,它pkg-config
已经在x86_64文件夹中查找了(中没有任何内容PKG_CONFIG_PATH
)。我不确定这是如何合并的,但是通过@GrandAdmiral显示的用于探测此问题的命令行表明它是由--variable pc_path
为pkg-config
自己的包设置的(以某种方式!)控制的。
在我看来,大多数答案所提供的信息过多而已。
一个安装的软件可能(并且通常确实)依赖某些库和/或头文件,并且系统使用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:<your-directory>
PKG_CONFIG_PATH
指定仅 在其中搜索yourPkg.pc
(pkg-config
规范)文件的其他目录。它不会影响特定于pkg的内容,例如库搜索目录。
我试图安装最新版本的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
原来我肯定需要其他软件包,所以经过一番谷歌搜索后发现我必须安装此软件包:
sudo apt-get install libssl-dev
所有这些都与更改pkg-config path env变量无关。
那些正在使用https://github.com/confluentinc/confluent-kafka-go的人
请遵循安装librdkafka
现在您可以使用go install / go run go build