我正在编写一个共享库,该库本身依赖于boost
和pcl
库。
在为我的库生成.pc
文件时,是否还应将所有这些库也作为依赖项添加到.pc
文件中?
自从我上次研究这些东西已经很长时间了,我有点困惑它在Linux上又如何工作。当我的测试应用程序链接到我的库时,我必须再次将所有这些pcl
和boost
库添加到构建中,即使该库已经针对这些库进行了链接。
但是,例如,当我查看libQtGui.so
的部门时,它具有数十种可链接到的所有库,但是我不需要将我的应用程序链接到那些库...仅-lQtGui
就足够了。
我刚刚使用CMake和link_libraries
添加了boost
和pcl
库。
答案 0 :(得分:1)
在为我的库生成.pc文件时,是否还应将所有这些库也作为依赖项添加到.pc文件中?
这取决于您的库的API:
#inclue <boost/...>
)(换句话说,您使用PUBLIC
(或INTERFACE
)命名关键字CMake + target_link_libraries
中针对boost / pcl的库)–然后是您需要添加'em; DT_NEEDED
个boost / pcl库条目(最有可能)(您可以用{{1}进行检查) }。对于最后一种情况,还需要将依赖项添加到ldd <your-lib>.so
文件中。另外,如果来自boost / pcl的二进制依赖关系(如果后者没有DSO,则不知道),请确保您指定链接库的确切位置-因为用户可能有多个(共存)boost安装(可能不兼容)或可以进行升级(后来)到其他(二进制不兼容)版本(而且您无法真正对其进行任何处理)…重要的是要链接到同一版本(或至少与二进制兼容),像您所做的那样,很难保证boost)库。
我刚刚使用CMake和
*.pc
添加了boost和pcl库。
请阅读有关“现代CMake”的内容,并停止使用link_libraries
:-)-改为使用link_libraries
…