使用简单程序boost :: signals2链接器错误

时间:2014-08-02 09:33:34

标签: c++ boost linker-errors boost-signals2

在使用Boost.Signals2的实验中,我尝试编译以下非常天真的程序。程序已经编译,但是我收到了链接器错误(请参阅此问题的底部以获取错误消息)。

// hello.cpp
#include <boost/signals2.hpp>

int main(int argc, char *argv[])
{
    boost::signals2::signal<void()> sig;
}

为什么会出现错误以及如何解决?

2014-09-17更新:问题仍未解决。可以使用GCC4.9和Windows XP上的Code :: Blocks或使用Clang和Xcode 5成功构建程序Mac OS X Mavericks,但出于一些神秘的原因,当在Mac OS X上使用GCC4.9和Eclipse构建程序时,链接错误就不会消失。)

我在SO上找到了以下相关主题,但似乎没有人回答我的问题。

  1. boost::signals2 undefined-reference when linking libraries together
  2. Boost linker errors when using header only libraries
  3. Does the boost.signals2 library need to be built?
  4. 以下是错误消息:

      

    make all

         

    Building file: ../src/hello.cpp

         

    Invoking: GCC C++ Compiler

         

    /usr/local/bin/g++-4.9 -I/usr/include -I/usr/local/include -O0 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"src/hello.d" -MT"src/hello.d" -o "src/hello.o" "../src/hello.cpp"

         

    Finished building: ../src/hello.cpp

         

    Building target: hello

         

    Invoking: MacOS X C++ Linker

         

    /usr/local/bin/g++-4.9 -L/usr/local/lib -L/usr/lib -o "hello" ./src/hello.o

         

    Undefined symbols for architecture x86_64:

         

    "std::__detail::_List_node_base::_M_hook(std::__detail::_List_node_base*)", referenced from:

         

    void std::list<boost::shared_ptr<boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group, boost::optional<int> >, boost::signals2::slot<void (), boost::function<void ()> >, boost::signals2::mutex> >, std::allocator<boost::shared_ptr<boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group, boost::optional<int> >, boost::signals2::slot<void (), boost::function<void ()> >, boost::signals2::mutex> > > >::_M_insert<boost::shared_ptr<boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group, boost::optional<int> >, boost::signals2::slot<void (), boost::function<void ()> >, boost::signals2::mutex> > const&>(std::_List_iterator<boost::shared_ptr<boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group, boost::optional<int> >, boost::signals2::slot<void (), boost::function<void ()> >, boost::signals2::mutex> > >, boost::shared_ptr<boost::signals2::detail::connection_body<std::pair<boost::signals2::detail::slot_meta_group, boost::optional<int> >, boost::signals2::slot<void (), boost::function<void ()> >, boost::signals2::mutex> > const&) in hello.o

         

    ld: symbol(s) not found for architecture x86_64

         

    collect2: error: ld returned 1 exit status

         

    make: *** [hello] Error 1

1 个答案:

答案 0 :(得分:1)

检查您的boost安装是否包含为x86_64编译的库。您可能有32位库。