Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > Нужна помощь в сборке программы с boost


Автор: blyaaa 20.7.2009, 23:23
Доброго времени суток.
Суть такова.
Имеется небольшой проект, состоящий из трех файлов: crawler.h, crawler.cpp и, собственно файл сод-ий главную функцию - searcher.cpp.
Проект компилится утилитой g++. В процесс сборки вовлечена утилита make.

Makefile:
Код

source_dirs := . /usr/include/libxml2/
search_wildcards := $(addsuffix /*.cpp,$(source_dirs))
searcher: $(notdir $(patsubst %.cpp,%.o,$(wildcard $(search_wildcards))))
    g++ -lpthread -isystem $^ -o $@
VPATH := $(source_dirs)
%.o: %.cpp
    g++ -c -isystem -MD $(addprefix -I,$(source_dirs)) $<
include $(wildcard *.d)


Кароче, если в файле searcher.cpp (собстно там где находится функция mail) сделать #include <boost/asio.hpp>,
то при попытке "мейка" линкер ругается вот так:
Код

g++ -lpthread -isystem crawler.o searcher.o -o searcher
searcher.o: In function `__static_initialization_and_destruction_0(int, int)':
searcher.cpp:(.text+0x2a5): undefined reference to `boost::system::get_system_category()'
searcher.cpp:(.text+0x2af): undefined reference to `boost::system::get_generic_category()'
searcher.cpp:(.text+0x2b9): undefined reference to `boost::system::get_generic_category()'
searcher.cpp:(.text+0x2c3): undefined reference to `boost::system::get_generic_category()'
searcher.cpp:(.text+0x2cd): undefined reference to `boost::system::get_system_category()'
searcher.o: In function `boost::asio::error::get_system_category()':
searcher.cpp:(.text._ZN5boost4asio5error19get_system_categoryEv[boost::asio::error::get_system_category()]+0x7): undefined reference to `boost::system::get_system_category()'
collect2: ld returned 1 exit status
make: *** [searcher] Error 1


Если инклудить файл не в файле с главной функцией а из файла допустим crawler.cpp, линкер не ругается, но именное пространство boost не доступно:
Код

searcher.cpp: In function 'int main(int, char**)':
searcher.cpp:8: error: 'boost' has not been declared


Отмечу, что без опций -lpthread -isystem, линкер ругался подобным матом и на поключение boost/asio даже из файла crawler.cpp.
Гугл пока что проблему не решил.
Кто что скажет по этому поводу?
Заранее благодарен.

Автор: andrew_121 21.7.2009, 00:59
Цитата(blyaaa @  20.7.2009,  23:23 Найти цитируемый пост)
Проект компилится утилитой g++

Это не утилита. Это компилятор.


Цитата(blyaaa @  20.7.2009,  23:23 Найти цитируемый пост)
g++ -lpthread -isystem $^ -o $@

Эту строку замени на:
Цитата

g++ -lpthread -lboost_system $^ -o $@

Автор: blyaaa 21.7.2009, 13:37
Цитата

Это не утилита. Это компилятор.


Спасибо, капитан очевидность, никогда не знал)))

Шутки в сторону.
Цитата

g++ -lpthread -lboost_system $^ -o $@

Вынужден вас поблагодарить.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)