【问题标题】:How does PKG-CONFIG select between two .pc files?PKG-CONFIG 如何在两个 .pc 文件之间进行选择?
【发布时间】:2016-02-28 18:35:35
【问题描述】:

我有两个用于 glib-2.0 的 .pc 文件

/usr/lib/x86_64-linux-gnu/pkgconfig/glib-2.0.pc
/usr/local/lib/pkgconfig/glib-2.0.pc

它们的不同之处在于它们指向包含文件的位置。

/usr/lib/x86... points to /usr/include
/usr/local/lib... points to /usr/local/include

这会在我运行时导致问题:

pkg-config --cflags gtk+-3.0

这将返回以下 glib-2.0 搜索位置:

-I/usr/local/include/glib-2.0 
-I/usr/local/lib/glib-2.0/include 

而我的包管理器已将 glib 库安装到

/usr/include/glib 

问题 1:为什么 PKG-CONFIG 选择第二个位置而不是第一个?我怎样才能改变这个?

问题2:有两个相同的.pc文件是否异常?

问题 3:如果我确实想删除其中一个 .pc 文件,我可以安全地删除吗?

注意:

  1. 我不希望将 glib 库复制到 /local/,因为包管理器会忽略这一点。
  2. 我不希望在运行 gcc 时另外添加 -I/usr/include,因为我希望 PKG-CONFIG 能够正常工作。 (我也认为这会导致我必须手动修改的其他问题)

【问题讨论】:

    标签: gcc pkg-config


    【解决方案1】:

    您可以使用 PKG_CONFIG_LIBDIR 环境变量来覆盖默认搜索目录。

    还有 PKG_CONFIG_PATH 可以用作以冒号分隔的目录列表来搜索 .pc 文件。

    有关更多信息,请参阅 pkg-config 的手册页。

    【讨论】:

    • 谢谢,更改 PKG_CONFIG_LIBDIR 以控制默认搜索允许我选择我想要的 .pc 文件。
    • 多个目录不能使用PKG_CONFIG_LIBDIR吗?我在交叉编译器根目录中有一些包,在/usr/local/lib/pkgconfig 中有一些包,但我想避免与/usr/lib/pkgconfig 中的任何包发生冲突。
    猜你喜欢
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 2013-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多