PKG_CONFIG_PATH 的使用

本文介绍了在Fedora14中遇到的glib库版本不匹配问题及其解决方案。通过了解系统如何识别库版本及.pc文件的作用,明确了环境变量PKG_CONFIG_PATH和LD_LIBRARY_PATH的设置方法。

在Fedora 14安装软件的时候遇到一个奇怪的问题。

所要安装的软件依赖glib库 2.20。 而系统自带的是2.18不满足条件。于是我安装了一个glib-2.25。但是安装完成之后查询库的版本依然是2.18.

这样就要提几个问题:

1. 系统是如何知道库的版本的?

一般来说,一个库在安装的过程中(如果是自编译的在configure阶段)会生成一个.pc文件,里面包含了库的相关信息

下面是vte库生成的.pc文件中的内容。其版本为0.27.2. 系统就是通过解析这个文件的内容来获取库的信息的。(系统并不是完全详细里面的内容,如果.pc文件里的版本信息,和实际的库不一致,系统会提示)

prefix=/usr/local

exec_prefix=${prefix}

libdir=${exec_prefix}/lib

includedir=${prefix}/include

 

defaultemulation=xterm

 

Name: vte

Description: Vte terminal widget.

Version: 0.27.2

Requires: glib-2.0 >= 2.22.0 gobject-2.0 pango >= 1.22.0 gtk+-2.0 >= 2.20.0 gobject-2.0 gio-2.0 gio-unix-2.0 x11 cairo-xlib

Libs: -L${libdir} -lvte

Cflags: -I${includedir}/vte-0.0 

 

2.这个文件在什么地方。

这个文件在安装库的时候会自动被拷贝到pkgconfig文件夹下。

对于系统默认安装的库路径为:/usr/lib/pkgconfig

对于用户自安装的库路径为:/usr/local/lib/pkgconfig

 

3.为什么系统看不到新版本的库?

系统默认情况下会到/usr/lib/pkgconfig中去查找库的信息。对于/usr/local/lib/pkgconfig是无视的。

这个时候就要设置环境变量PKG_CONFIG_PATH。这样系统会优先到PKG_CONFIG_PATH中列的路径中去搜索库的信息文件。

 

 

对于文章前面描述的问题只要将PKG_CONFIG_PATH设置为/usr/local/lib/pkgconfig 就可以解决问题了。

PS: 此外,还有一个环境变量LD_LIBRARY_PATH要相应设置为/usr/local/lib否则系统会发现.pc文件描述的内容与时间的库信息不一致而报错。

### **在 Windows 上设置 `PKG_CONFIG_PATH`** `PKG_CONFIG_PATH` 是一个环境变量,用于告诉 `pkg-config` 工具在哪里查找 `.pc` 文件(库的元数据文件)。在 Windows 上设置它的方法如下: --- ## **1. 检查 `pkg-config` 是否可用** 在 **CMD** 或 **PowerShell** 中运行: ```cmd pkg-config --version ``` 如果未安装,需要先安装: - **方法 1**:通过 **MSYS2**(推荐) ```cmd pacman -S mingw-w64-x86_64-pkg-config ``` - **方法 2**:手动安装 [pkg-config for Windows](https://www.freedesktop.org/wiki/Software/pkg-config/) --- ## **2. 查找 `.pc` 文件路径** Log4cpp 的 `.pc` 文件通常位于: - **MSYS2/Mingw**:`C:\msys64\mingw64\lib\pkgconfig\` - **自定义安装路径**:如 `C:\libs\log4cpp\lib\pkgconfig\` 你可以手动搜索: ```cmd where /R C:\ log4cpp.pc ``` --- ## **3. 设置 `PKG_CONFIG_PATH`** ### **(1)临时设置(仅当前会话有效)** - **CMD**: ```cmd set PKG_CONFIG_PATH=C:\path\to\pkgconfig;%PKG_CONFIG_PATH% ``` - **PowerShell**: ```powershell $env:PKG_CONFIG_PATH = "C:\path\to\pkgconfig;$env:PKG_CONFIG_PATH" ``` ### **(2)永久设置(对所有终端生效)** - **方法 1**:通过 **系统环境变量** 1. 按 `Win + R`,输入 `sysdm.cpl` → **高级** → **环境变量** 2. 在 **系统变量** 中: - 如果已存在 `PKG_CONFIG_PATH`,点击 **编辑** 并追加路径(用 `;` 分隔)。 - 如果没有,点击 **新建**,变量名 `PKG_CONFIG_PATH`,变量值 `C:\path\to\pkgconfig`。 3. 重启终端生效。 - **方法 2**:使用 `setx`(命令行方式) ```cmd setx PKG_CONFIG_PATH "C:\path\to\pkgconfig;%PKG_CONFIG_PATH%" ``` **注意**:`setx` 需要重启终端才能生效。 --- ## **4. 验证是否生效** ```cmd pkg-config --modversion log4cpp ``` 如果返回版本号(如 `1.1.3`),说明配置成功。 --- ## **5. 常见问题** ### **(1)`pkg-config` 找不到 `.pc` 文件?** - 确保路径正确,例如: ```cmd dir C:\msys64\mingw64\lib\pkgconfig\log4cpp.pc ``` - 如果 Log4cpp 是自己编译的,确保安装时生成了 `.pc` 文件。 ### **(2)`PKG_CONFIG_PATH` 设置后仍无效?** - 检查是否有多余的空格或错误的路径分隔符(应用 `;` 而不是 `:`)。 - 尝试重启终端或计算机。 ### **(3)CMake 仍然找不到 Log4cpp?** 在 `CMakeLists.txt` 中手动指定路径: ```cmake set(ENV{PKG_CONFIG_PATH} "C:/path/to/pkgconfig") ``` --- ## **总结** | 操作 | 命令 | |------|------| | **临时设置** | `set PKG_CONFIG_PATH=C:\path\to\pkgconfig;%PKG_CONFIG_PATH%` | | **永久设置** | `setx PKG_CONFIG_PATH "C:\path\to\pkgconfig;%PKG_CONFIG_PATH%"` | | **验证** | `pkg-config --modversion log4cpp` |
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值