2011-07-08 2 views
0

Мне пришлось создать библиотеку 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

Я думаю, что ваша команда сборки неверна. Вы явно перечисляете архивную библиотеку необычным способом, и я думаю, что 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

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

Смежные вопросы