使用仅标头库时,会增加链接器错误

时间:2013-06-07 10:04:28

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

我正在使用Boost 1.53.0的以下组件和C ++ 11库...

  • 升压:: signals2 :: scoped_connection
  • 升压:: signals2 ::信号
  • 升压:: signals2 ::连接
  • 升压::数学::常数
  • 升压:: circular_buffer
  • 升压:: lexical_cast的

根据this answer,我不需要链接库来使用Boost的这些部分。根据{{​​3}},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
  ...

为什么?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

问题是虚假的

#include <boost/thread/mutex.hpp>

意外地遗留在文件中间。