Boost Thread Destructor Неопределенный символ

Я использую OSX 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, Я проверил, что библиотеки и заголовки присутствуют там и недавно были изменены.

Я пытаюсь скомпилировать пример ускоренного асинхронного ввода-вывода, найденный здесь: 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

Я пытался использовать как Apple Clang ++ 4.0 и G ++ 4.6.0. Я получаю одну и ту же неопределенную ошибку символа в обеих программах.

Другие люди, похоже, тоже не могли скомпилировать этот пример кода. Мне известен этот вопрос: C ++ / Boost: неопределенные символы в примере? и этот: Ошибка компоновщика при компиляции примера boost.asio. Однако каждая из этих проблем, похоже, была исправлена ​​путем добавления соответствующих ключей (-lboost_thread и -lboost_system) в командную строку. У меня уже есть те. Я также попытался добавить -lpthread без удачи.

Спасибо, что нашли время посмотреть на мой вопрос! Любая помощь приветствуется. 🙂

3

Решение

Просто столкнулся с этой же проблемой, и я обнаружил, что возвращение к Boost 1.49 решает проблему. Ссылки на скачивание для Boost 1.49 находятся здесь:

http://www.boost.org/users/history/version_1_49_0.html

Перед установкой 1.49 я удалил 1.52, удалив /usr/local/include/boost а также /usr/local/lib/*boost*, Не уверен, что изменилось между 1.49 и 1.52, чтобы вызвать эту проблему, или будет работать Boost 1.50 или 1.51.

1

Другие решения

Поместите библиотеки, с которыми вы связываетесь прошлой в командной строке.

Компоновщик GNU использует своего рода обратный поиск зависимостей, поэтому, если файл A зависит от библиотеки B, B должен прийти после А в командной строке.

0

По вопросам рекламы [email protected]