PKG_CONFIG_PATH 环境变量

MKJ*_*MKJ 105 pkg-config

如果您在非标准前缀中安装了软件,请考虑调整 PKG_CONFIG_PATH 环境变量。

这是什么意思 ?

dev*_*av2 102

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
Run Code Online (Sandbox Code Playgroud)

要设置PKG_CONFIG_PATH值使用:

export PKG_CONFIG_PATH=/usr/lib/pkgconfig
Run Code Online (Sandbox Code Playgroud)

或者

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
Run Code Online (Sandbox Code Playgroud)


Gra*_*ral 52

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

pkg-config --variable pc_path pkg-config
Run Code Online (Sandbox Code Playgroud)

要添加到该路径,请设置PKG_CONFIG_PATH环境变量。man 文件指出PKG_CONFIG_PATH

用于搜索 .pc 文件的以冒号分隔(在 Windows 上,以分号分隔)的目录列表。搜索路径后将始终搜索默认目录;默认是 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}` (5认同)
  • 这是一个很好的答案,帮助了我。但是,为了澄清,您应该说“添加到该路径”,而不是“修改”,因为可以有一个空白的`PKG_CONFIG_PATH` 并且仍然有默认的搜索目录,加上设置一个非空值并没有清除默认值。 (5认同)

小智 41

第一个答案在技术上不够明确。从手册页(打开终端,输入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是已知的。


Ala*_*met 10

您正在尝试构建一个软件,比如说 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/
Run Code Online (Sandbox Code Playgroud)

完成后,重新运行失败的命令有望成功。

如果安装了 libcog(包括库和头文件),而您没有 libcog.pc 文件,则情况会很糟糕。据推测,libcog 的标准安装包含该信息,否则 Widget 不会依赖它。我首先调查重新安装 libcog。可以手动创建 libcog.pc 文件,但正确创建它是困难的,并且高度特定于给定的库。

  • 不过有一件事——如果定义了 PKG_CONFIG_PATH 怎么办——这会正确地覆盖它吗? (4认同)

小智 9

我查看了 64 位系统上的手册页,有点困惑。它在一行中说:

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

我原以为它总是在目录 lib/pkgconfig 中查找。原来它的目录本身。就我而言,我试图编译 hello world gtk 教程。我找到了我想要的文件,例如

locate gtk | grep '\.pc'
Run Code Online (Sandbox Code Playgroud)

结果包括:

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

最后是做一个出口。

export PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig/
Run Code Online (Sandbox Code Playgroud)


clo*_*ano 7

在我看来,大多数答案的信息都超出了所需。

安装的软件可能(并且通常确实)依赖于一些库和/或头文件,系统使用 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>
Run Code Online (Sandbox Code Playgroud)

有关更多信息,您可以查看这里这里


dob*_*bey 1

这意味着您正在尝试从源代码构建某些内容,但它无法找到所需的所有依赖项。pkg-config它用来查找这些库的开发文件的脚本会输出此消息。