【问题标题】:Which libraries should go to a pkg-config file as a dependencies?哪些库应该作为依赖项进入 pkg-config 文件?
【发布时间】:2018-11-05 16:19:45
【问题描述】:

我正在编写一个共享库,它本身依赖于 boostpcl 库。

为我的库生成.pc 文件时,我是否应该将所有这些库也作为依赖项添加到.pc 文件中?

自从我上次研究这些东西以来已经有很长时间了,我有点困惑它是如何在 Linux 上再次工作的。当我的测试应用程序链接到我的库时,我必须将所有这些 pclboost 库再次添加到构建中,即使库已经链接到这些库。

但是当我查看 libQtGui.so 的 deps 时,例如,它有几十个它链接到的各种库,但我不需要让我的应用程序链接到这些库......只有 @987654328 @ 足够的。

我刚刚使用 CMake 和 link_libraries 添加了 boostpcl 库。

【问题讨论】:

    标签: linux cmake g++ dynamic-linking pkg-config


    【解决方案1】:

    在为我的库生成 .pc 文件时,我是否应该将所有这些库也作为依赖项添加到 .pc 文件中?

    这取决于你的库的 API:

    • 如果你的库的公共(即可安装)头文件使用 boost/pcl(即有#inclue <boost/...>)(换句话说,你在将你的库与 boost/pcl 链接时使用了PUBLIC(或INTERFACE)命名关键字CMake+target_link_libraries) -- 然后yes你需要添加'em;
    • 否则,这取决于您最后拥有的内容——即您的 DSO 是否具有用于 boost/pcl 库的 DT_NEEDED 条目(很可能)(您可以使用 ldd <your-lib>.so 检查它)。对于最后一种情况,您还需要将依赖项添加到 *.pc 文件中。

    此外,如果二进制依赖于 boost/pcl(不知道后者是否有任何 DSO),请确保您指定链接库的确切位置——因为用户可能有多个(共存的)boost安装(可能不兼容)或可以升级(稍后)到其他(二进制不兼容)版本(你不能真的用它做smth)......重要的是链接到相同的(或至少是二进制兼容的,这像你一样很难保证提升)库......

    我刚刚使用 CMake 和 link_libraries 添加了 boost 和 pcl 库。

    请阅读有关“现代 CMake”的信息并停止使用 link_libraries :-) -- 改用 target_link_libraries...

    【讨论】:

    • 是的,link_libraries 的原因是我没有写 CMakeLists.txt :p
    猜你喜欢
    • 2011-05-07
    • 1970-01-01
    • 2017-05-26
    • 1970-01-01
    • 2020-08-09
    • 1970-01-01
    • 2022-09-26
    • 2018-11-19
    • 2010-11-19
    相关资源
    最近更新 更多