Ошибка при подключении программы к библиотеке потоков - PullRequest
0 голосов
/ 09 июля 2011

Мне пришлось собрать библиотеку boost для многопоточности.Поэтому я дал команду

./bootstrap.sh 

в каталоге boost_1_46_1.Затем

bjam --toolset=gcc --build-type=complete --with-thread link=static stage

Когда я пытался скомпилировать простую программу с использованием потоков, используя приведенную ниже команду, я получаю ошибки.

g++ -I/home/sharatds/Downloads/boost_1_46_1 /home/sharatds/Downloads/boost_1_46_1/stage/lib/libboost_thread.a main.cpp -o ini
main.cpp:(.text+0x804): undefined reference to `boost::thread::join()'
main.cpp:(.text+0x9ec): undefined reference to `boost::thread::~thread()'

Я что-то упустил?

1 Ответ

1 голос
/ 09 июля 2011

Я думаю, что ваша команда сборки неверна.Вы явно перечисляете архивную библиотеку необычным образом, и я думаю, что GCC игнорирует или неправильно интерпретирует ее.

Попробуйте разделить сборку на два этапа.Один шаг, чтобы скомпилировать файл .cpp в .o, а затем еще один, чтобы связать .o с архивной библиотекой boost_thread и создать исполняемый файл.

g++ -I/home/sharatds/Downloads/boost_1_46_1 main.cpp -o main.o
g++ main -o ini -L/home/sharatds/Downloads/boost_1_46_1/stage/lib/ -lboost_thread

Первая строка выше компилирует ваш main.cpp вобъектный файл.Вторая строка связывает ваш объектный файл с библиотекой boost_thread.Аргумент -L во многом похож на аргумент -I, но обеспечивает путь поиска для библиотек, а не для включения файлов.

Кроме того, я подозреваю, что ваш аргумент -I на самом деле должен быть

-I/home/sharatds/Downloads/boost_1_46_1/stage/include

, чтобы вы включали заголовки из результатов компоновки, а не из самого исходного дерева.Просто на этом догадываюсь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...