C++ boost::signals2链接器错误(使用简单程序)
在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
//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;
}