2013-07-26 41 views
0

我有一些严重的问题,链接到其他图书馆与G ++时,经常让我很沮丧地狱,并停止在我面前,我甚至开始。问题使用与依赖G ++

例如:我只是用Boost.Asio的,尝试的教程。我在文档中发现我必须链接到boost_system和正则表达式,但由于某种原因,我还必须添加pthread才能正常工作......我已经使用'apt-get install'安装了提升,并且想到了我必须链接是提升。显然错了......

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

我想我的主要问题是:是否有任何逻辑来配置Linux上构建? (有用的参考资料随时欢迎也)

只是无奈的最后一点:它总是在我看来,编程是更多的乐趣和生活方式比实际得到它更容易...

+1

尝试'man ldconfig'。 – lapk

回答

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) 
+0

我会接受,因为这是有用的信息。但是,对于我来说,为什么一个共享库会设置一些依赖关系而不是其他的,为什么共享库会设置一些依赖项?如果缺少一个依赖关系,他们是如何设法建立它的?假设我决定从源代码构建一个lib,并且它会生成共享库,它们是否会包含这个自动链接信息,或者这是一些包装细节? – kodu

+1

@ user1896048即使您不链接其依赖库,也可以构建共享库。这是因为缺少的符号仅在构建可执行文件时才被检查。在构建目标文件时,不会检查它(库是目标文件集合)。如果从源代码构建,那么如果库构建系统的创建者负责正确获取所有链接标记。如果他们没有,你仍然可以手动影响它(通常,取决于所使用的构建系统),通过在LDFLAGS中添加'-l'条目。最后一步可能是Debian软件包错过了什么。 –