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

Which libraries should go to a pkg-config file as a dependencies?

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

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

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

但是当我查看 libQtGui.so 的 deps 时,例如,它有数十种各种库 link,但我不需要制作我的应用程序 link 到那些库...只有 -lQtGui 就足够了。

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

When generating .pc file for my library should I add all these libraries also to the .pc file as dependencies?

这取决于您图书馆的API:

  • 如果 public(即可安装)headers 你的库使用 boost/pcl(即有 #inclue <boost/...>)(换句话说,你使用 PUBLIC(或 INTERFACE) 当 link 你的库在 CMake+boost/pcl 中时命名关键字 target_link_libraries) - 然后 yes 你需要添加'嗯;
  • 否则,这取决于你到底有什么 - 即你的 DSO 是否有 boost/pcl 库的 DT_NEEDED 条目(最有可能)或没有(你可以检查它 / ldd <your-lib>.so)。对于最后一种情况,您还需要将依赖项添加到 *.pc 文件中。

此外,如果来自 boost/pcl 的二进制依赖项(不知道后者是否有任何 DSO),请确保指定 linked 库的确切位置——因为用户可能有多个 (co-existed) boost 安装(可能不兼容)或者可以(稍后)升级到其他(二进制不兼容)版本(而且你不能真的用它做 smth)......重要的是 link编辑到与您相同的(或至少二进制兼容,这很难保证提升)库……

I have just used CMake and link_libraries to add boost and pcl libs.

请阅读有关 "Modern CMake" 的信息并停止使用 link_libraries :-) -- 请改用 target_link_libraries