Я использую OS X Mountain Lion. Я только что скачал, распаковал и собрал boost 1.52.0, следуя инструкциям, предоставленным на веб-сайте boost: http://www.boost.org/doc/libs/1_52_0/more/getting_started/unix-variants.html. Я оставил префикс установки по умолчанию /usr/local
, что означает, что библиотеки устанавливаются в /usr/local/lib
, а заголовочные файлы — в /usr/local/include
. Я проверил, что библиотеки и заголовки присутствуют там и недавно изменены.
Я пытаюсь скомпилировать приведенный здесь пример асинхронного ввода-вывода boost: http://www.boost.org/doc/libs/1_52_0/doc/html/boost_asio/tutorial/tuttimer5/src.html (источник).
Вот моя команда компиляции:
g++ -Wall -c -g -I/usr/local/include src/test1.cpp -o src/test1.o
где src/test1.cpp — исходный файл примера. Вот моя команда связывания (и ошибка):
g++ -Wall -L/usr/local/lib -lboost_thread -lboost_system src/test1.o -o bin/test1
Undefined symbols for architecture x86_64:
"boost::thread::~thread()", referenced from:
_main in test1.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
Я пробовал использовать как clang++ 4.0 от Apple, так и g++ 4.6.0. Я получаю ту же ошибку неопределенного символа из обеих программ.
Похоже, у других людей тоже возникли проблемы с компиляцией этого примера кода. Мне известен этот вопрос: C++/Boost: неопределенные символы в примере? и этот: Ошибка компоновщика при компиляции примера boost.asio. Однако каждая из этих проблем, кажется, была устранена путем добавления соответствующих ключей (-lboost_thread и -lboost_system) в командную строку. У меня уже есть такие. Я также безуспешно пытался добавить -lpthread.
Спасибо, что нашли время, чтобы посмотреть на мой вопрос! Любая помощь приветствуется. :)