0

在 Boost.Signals2 的实验中,我尝试编译以下非常幼稚的程序。该程序确实编译了,但我收到了链接器错误(有关错误消息,请参阅此问题的底部)。

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

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

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

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

我在 SO 上找到了以下相关线程,但似乎没有一个回答我的问题。

  1. 将库链接在一起时的 boost::signals2 未定义引用
  2. 使用仅标头库时增加链接器错误
  3. 是否需要构建 boost.signals2 库?

这是错误消息:

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

4

1 回答 1

1

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

于 2014-08-02T10:56:27.277 回答