Ошибка компоновщика boost::signal2 с простой программой

В эксперименте с Boost.Signals2 я попытался скомпилировать следующую очень наивную программу. Программа скомпилировалась, но я получил ошибку компоновщика (сообщение об ошибке см. В нижней части этого вопроса).

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

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

Почему произошла ошибка и как ее исправить?

(Обновление от 2014-09-17: проблема все еще не решена. Программу можно успешно собрать с помощью GCC4.9 и Code::Blocks в Windows XP или с Clang и Xcode 5 в Mac OS X Mavericks, но по некоторым загадочным причинам ошибка компоновки не исчезает при сборке программы с GCC4.9 и Eclipse в Mac OS X.)

Я нашел следующие связанные темы на SO, но ни один, кажется, не отвечает на мой вопрос.

  1. boost:: signal2 undefined-reference при связывании библиотек
  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

1 ответ

Убедитесь, что ваша установка boost содержит библиотеки, скомпилированные для x86_64. У вас могут быть 32-битные библиотеки.

Другие вопросы по тегам