【问题标题】:G++ can't find boost libraries. I say they're in plain sightG++ 找不到 boost 库。我说他们是显而易见的
【发布时间】:2012-02-14 11:39:06
【问题描述】:

我正在尝试构建一些代码。这是我得到的错误:

main.o: In function `__static_initialization_and_destruction_0':
/home/jmbeck/Downloads/boost_1_48_0/boost/system/error_code.hpp:214: undefined reference to `boost::system::generic_category()'

还有更多,但我认为这无关紧要。

这是构建命令:

g++ -I/home/jmbeck/Downloads/boost_1_48_0 
    -L/home/jmbeck/Downloads/boost_1_48_0/stage/lib 
    -lm 
    -lboost_system 
    -lboost_thread
    -lboost_regex 
    main.cpp

/home/jmbeck/Downloads/boost_1_48_0/stage/lib 目录包含预期的文件:

libboost_system.a
libboost_system.so@
libboost_system.so.1.48.0*
libboost_thread.a
libboost_thread.so@
libboost_thread.so.1.48.0* 
libboost_regex.a
libboost_regex.so@
libboost_regex.so.1.48.0*
... etc...

我尝试构建一个不使用预编译库的快速程序,它编译得很好。它会找到适当的标头,但不会找到库。

我做错了什么?

【问题讨论】:

  • 你可以使用-Wall选项到g++,你可以使用-v来理解它在做什么,-H来理解它已经找到的头文件。您的错误是链接错误(缺少库或顺序错误)。
  • 我的实际 Makefile 确实使用了 -Wall 和 -v(和 -Wextra)。我想深入了解基础知识。但这对未来的观众来说是一个很好的提示;它以前对我有帮助。

标签: c++ linux gcc boost g++


【解决方案1】:

尝试将库放在 main.cpp 之后。

过去,当 GCC 忽略库时我经历过一些奇怪的事情,因为它认为它们没有被使用,然后才到达我的源文件。

【讨论】:

  • 谢谢。做到了。我相信我在过去的某个时候更新了 gcc。这些相同的 Makefile 几个月前工作得很好。那令人沮丧。再次感谢您的提示!
  • 这可能应该被报告为一个错误。
【解决方案2】:

通常链接器要求库按从最依赖到最不依赖的顺序排列(我相信 MS 不会)。在这种情况下,线程或正则表达式可能取决于系统,因此您需要在依赖它的其他 boost 库之后列出 -lsystem。

【讨论】:

    猜你喜欢
    • 2013-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-25
    相关资源
    最近更新 更多