0

在使用 g++ 链接到其他库时,我遇到了一些严重的问题,它经常让我沮丧,甚至在我开始之前就阻止了我。

例如:我只是在使用 boost.asio,尝试教程。我在文档中发现我必须链接到 boost_system 和正则表达式,但由于某种原因,我还必须添加 pthread 才能使其工作......我已经使用 'apt-get install' 安装了 boost,我认为我必须链接到被提升。明显错了……

看来我真的无法理解如何在 linux 上开发。如何知道何时需要添加库?在我给出的示例中,boost 依赖于 pthread,所以我必须链接它。为什么我不必链接到提升所依赖的任何其他东西?或者假设 pthread 依赖于某些东西,为什么我不必链接它(例如,你为什么不必链接到标准 C 库)?你怎么知道g++是怎么配置的?你怎么能改变它?

我想我的主要问题是:在 linux 上配置构建是否有任何逻辑?(有用的参考也总是受欢迎的)

最后一点令人沮丧:在我看来,编程总是比实际开始更有趣,更容易......

4

1 回答 1

3

这是由于包装错误。如果库 A 依赖于库 B,则该 A 应该链接到 B。您的应用程序只需链接到 A。

有时,某些发行版的库打包程序会出错。你对此无能为力,真的。例如,当我在 Gentoo Linux 上链接 boost_system 时,我不必链接到 pthread,因为 boost_system 链接到 pthread 本身:

$ ldd /usr/lib/libboost_system.so | grep 线程
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fcf677f8000)
于 2013-07-26T20:11:23.877 回答