使用g ++链接到其他库时,我遇到了一些严重的问题,在我开始使用之前,它经常让我感到沮丧并阻止我。
例如:我刚刚使用boost.asio,尝试了教程。我在文档中发现我必须链接到boost_system和regex,但由于某种原因我还必须添加pthread才能工作......我已经用'apt-get install'安装了boost,认为我只需要链接到了提升。显然错了......
看来我真的无法理解如何在linux上开发。你怎么知道什么时候需要添加一个库?在我给出的示例中,boost取决于pthread,所以我必须链接它。为什么我不能链接到任何其他东西提升取决于?或者假设pthread依赖于某些东西,为什么我不必链接它(例如,为什么不必链接到标准C libs)?你怎么知道如何配置g ++?你怎么能改变它?
我想我的主要问题是:在Linux上配置构建是否有任何逻辑? (也欢迎有用的参考资料)
最后一点令人沮丧的是:在我看来编程总是比实际编程更容易和更轻松...
答案 0 :(得分:3)
这是由于包装错误造成的。如果库A依赖于库B,那么A应该链接到B.您的应用程序只需链接A。
有时,某个发行版的库的打包器会出错。真的,你无能为力。例如,当我在Gentoo Linux上链接boost_system时,我不必链接到pthread,因为boost_system自己链接到pthread:
$ ldd /usr/lib/libboost_system.so | grep pthread libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fcf677f8000)