C++ boost::signals2链接器错误(使用简单程序)

C++ boost::signals2链接器错误(使用简单程序),c++,boost,linker-errors,boost-signals2,C++,Boost,Linker Errors,Boost Signals2,在Boost.Signals2的一个实验中,我试图编译以下非常简单的程序。程序确实编译了,但是我得到了一个链接器错误(错误消息见问题的底部) //hello.cpp #包括 int main(int argc,char*argv[]) { boost::signals2::sig信号; } 为什么会出现错误以及如何修复 (2014-09-17更新:问题仍未解决。该程序可以在Windows XP上使用GCC4.9和Code::Blocks或Mac OS X Mavericks上使用Clang和X

在Boost.Signals2的一个实验中,我试图编译以下非常简单的程序。程序确实编译了,但是我得到了一个链接器错误(错误消息见问题的底部)

//hello.cpp
#包括
int main(int argc,char*argv[])
{
boost::signals2::sig信号;
}
为什么会出现错误以及如何修复

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

我已经找到了以下相关的线索,但似乎没有人能回答我的问题

  • 以下是错误消息:

    make all

    构建文件:../src/hello.cpp

    <代码>调用:GCC C++编译器< /COD> < /P>

    /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”

    完工建筑:../src/hello.cpp

    建筑目标:您好

    < P>代码>调用:MaOS X C++链接器< /C> < /P>
    /usr/local/bin/g++-4.9-L/usr/local/lib-L/usr/lib-o“你好”。/src/hello.o

    架构x86\u 64的未定义符号:

    “std::\u详细信息::\u列表\节点\基础::\u M\挂钩(std::\u详细信息::\u列表\节点\基础*)”,引用自:

    void std::list::_M_insert(std:_list_迭代器,boost::shared_ptr const&)在hello.o中

    ld:未找到架构x86_64的符号

    collect2:错误:ld返回了1个退出状态

    make:**[hello]错误1


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

    编译时是否输入了-std=c++11?@HerpDerpington是的,我输入了。我还尝试了
    -std=c++0x
    ,但生成了几乎相同的错误消息。谢谢。我使用自制软件安装了boost 1.55。如何检查它是否为x86_64编译?不管怎样,我很困惑:Boost.Signals2不是一个只有标题的库吗?另外,如果我使用Boost.Signals(必须为其构建一些库)而不是Boost.Signals2(仅限于头),链接器不会抱怨。我认为Boost-Signals2是线程安全的,我想这将使它依赖于Boost线程。Boost线程不仅仅是header。至于boost的版本,请查看库。它们的名字应该包含一些关于它的架构的东西,而库的名字没有任何提示。它们只是
    libboost\u signals.a
    libboost\u signals-mt.a
    libboost\u thread-mt.a
    ,等等。我从未使用过自制软件。我想您指的是linux的包管理器?我会看看homebrew,看看它安装了什么。当您调用homebrew时,请尝试:“brew安装地址模型=64 boost”
    // hello.cpp
    #include <boost/signals2.hpp>
    
    int main(int argc, char *argv[])
    {
        boost::signals2::signal<void()> sig;
    }