哪些库应作为依赖项进入pkg-config文件?

时间:2018-11-05 16:19:45

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

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

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

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

但是,例如,当我查看libQtGui.so的部门时,它具有数十种可链接到的所有库,但是我不需要将我的应用程序链接到那些库...仅-lQtGui就足够了。

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

1 个答案:

答案 0 :(得分:1)

  

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

这取决于您的库的API:

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

另外,如果来自boost / pcl的二进制依赖关系(如果后者没有DSO,则不知道),请确保您指定链接库的确切位置-因为用户可能有多个(共存)boost安装(可能不兼容)或可以进行升级(后来)到其他(二进制不兼容)版本(而且您无法真正对其进行任何处理)…重要的是要链接到同一版本(或至少与二进制兼容),像您所做的那样,很难保证boost)库。

  

我刚刚使用CMake和*.pc添加了boost和pcl库。

请阅读有关“现代CMake”的内容,并停止使用link_libraries :-)-改为使用link_libraries