【问题标题】:Boost linker errors when using header-only libraries使用仅标头库时增加链接器错误
【发布时间】:2013-06-03 14:29:53
【问题描述】:

我将 Boost 1.53.0 的以下组件与 C++11 库结合使用...

  • boost::signals2::scoped_connection
  • boost::signals2::signal
  • boost::signals2::connection
  • boost::math::constants
  • boost::circular_buffer
  • boost::lexical_cast

根据this answer,我不需要链接库来使用Boost 的这些部分。根据this answer,signals2 也应该是仅标头。但是,我仍然收到链接器错误...

Undefined symbols for architecture i386:
  "boost::system::system_category()", referenced from:
  ___cxx_global_var_init2 in Main.o
  ...
  "boost::system::generic_category()", referenced from:
  ___cxx_global_var_init in Main.o
  ___cxx_global_var_init1 in Main.o
  ...

为什么?

【问题讨论】:

  • 快速浏览 Boost 1.53.0 中 Signals2 的文档也说它只是标题。我有理由相信其他人也是。但是...您确定在该列表中也没有Boost.Asio吗?这需要与 Boost.System 链接以获取其错误代码。
  • 您刚刚排除了有趣的部分:referenced from: ... 来自哪里?该部分将为您提供有关库/函数调用 Boost.System 的信息
  • @ArneMertz 添加了一些细节。 .其余的是给出相同___cxx_global_var_init 类型消息的其他文件列表
  • 请给我们完整的编译器错误,以及您的 Boost 包的完整列表。例如。如果我没记错的话,Boost.Asio 也使用 Boost.system
  • 问题已解决。 .见答案。该死,我觉得自己很愚蠢:S 谢谢大家

标签: c++ boost c++11 header linker-errors


【解决方案1】:

Boost.Signals2 确实只有标题,但 Boost.System is not。您必须确保您对该库没有任何依赖关系。如果它在您自己的代码中,您必须构建 Boost.System 并链接它。如果它是从任何仅标头的 Boost 库中调用的,file a bug report

【讨论】:

    【解决方案2】:

    问题是假的

    #include <boost/thread/mutex.hpp>
    

    不小心留在文件中间。

    【讨论】:

      猜你喜欢
      • 2016-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-30
      • 2018-12-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多