2009-08-20 4 views
4

Просто задал вопрос о связывании библиотек Boost в файле make. Спасибо тем, кто помог с этим. Я закончил с этим:не может связывать boost.system в make-файле

accesstimer: acctime.o bentimer.o 
    g++ -L/usr/local/boost/boost_1_39_0/stage/lib -lboost_system -lboost_filesystem acctime.o bentimer.o -o accesstimer 

acctime.o: acctime.cpp bentimer.h 
    g++ -I /usr/local/boost/boost_1_39_0 -c acctime.cpp 

bentimer.o: bentimer.cpp bentimer.h 
    g++ -c bentimer.cpp 

Моя проблема сейчас в том, что Boost.Filesystem требует boost.system и выше сделайте файл не может найти boost.system.

Я получил название для boost.filesystem, просмотрев сцену/lib dir и удалив раздел lib и трейлинг имени файла (libboost_filesystem-gcc41-mt.a). Как вы можете видеть выше, я сделал то же самое с libboost_system-gcc41-mt.a и придумал boost_system, но он не может быть найден.

Кто-нибудь знает, как я бы связал boost.system?

Спасибо дядя zeive, который работал, но как только я пытаюсь использовать одну из файловой системы ключевых слов (например, существует) я получаю это:

g++ -I /usr/local/boost/boost_1_39_0 -c acctime.cpp 
In file included from acctime.cpp:5: 
bentimer.h:2:19: warning: extra tokens at end of #ifndef directive 
bentimer.h:11:18: warning: extra tokens at end of #ifdef directive 
bentimer.h:28:3: warning: no newline at end of file 
g++ -L/usr/local/boost/boost_1_39_0/stage/lib -lboost_system-gcc41-mt -lboost_filesystem acctime.o bentimer.o -o accesstimer 
acctime.o: In function `boost::enable_if<boost::filesystem::is_basic_path<boost::filesystem::basic_path<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::filesystem::path_traits> >, bool>::type boost::filesystem::exists<boost::filesystem::basic_path<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::filesystem::path_traits> >(boost::filesystem::basic_path<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::filesystem::path_traits> const&)': 
acctime.cpp:(.text._ZN5boost10filesystem6existsINS0_10basic_pathISsNS0_11path_traitsEEEEENS_9enable_ifINS0_13is_basic_pathIT_EEbE4typeERKS7_[boost::enable_if<boost::filesystem::is_basic_path<boost::filesystem::basic_path<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::filesystem::path_traits> >, bool>::type boost::filesystem::exists<boost::filesystem::basic_path<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::filesystem::path_traits> >(boost::filesystem::basic_path<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::filesystem::path_traits> const&)]+0x35): undefined reference to `boost::filesystem::detail::status_api(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::system::error_code&)' 
collect2: ld returned 1 exit status 
make: *** [accesstimer] Error 1 

Вы знаете wjat я здесь делаю неправильно?

Теперь я добавил увеличение корневой ссылке -I к первой команде связи он строит отлично:

accesstimer: acctime.o bentimer.o 
    g++ -L/usr/local/boost/boost_1_39_0/stage/lib -lboost_system-gcc41-mt -lboost_filesystem-gcc41-mt -I /usr/local/boost/boost_1_39_0 acctime.o bentimer.o -o accesstimer  

acctime.o: acctime.cpp bentimer.h 
    g++ -I /usr/local/boost/boost_1_39_0 -c acctime.cpp 

bentimer.o: bentimer.cpp bentimer.h 
    g++ -c bentimer.cpp 

Но когда я исполняю я получаю:

./accesstimer: error while loading shared libraries: libboost_system-gcc41-mt-1_39.so.1.39.0: cannot open shared object file: No such file or directory 

Этот файл присутствует, но его не собирать.

ответ

1

Ответ для меня, надеюсь, это поможет кому-то иначе было следующее: У меня возникли проблемы с привязкой, хорошие люди здесь заставили меня поместить нужный материал в мой файл, но я все еще получал:

./accesstimer: error while loading shared libraries: libboost_system-gcc41-mt-1_39.so.1.39.0: cannot open shared object file: No such file or directory 

Решение было просто выполнить:

ldconfig 

На моей машине Linux, что я только что установленный подталкивание на и построил библиотеки filesytem. Я уверен, что, поскольку ldconfig необходимо запустить для моей системы, чтобы забрать новые библиотеки, которые я установил. Теперь он работает.

4

На самом деле вы не должны удалить всю заднюю часть, только расширение:

-lboost_system-gcc41-mt 

То же самое относится и к boost_filesystem:

-lboost_filesystem-gcc41-mt 
+0

-lboost_filesystem работает отлично для меня. –

+0

@Robert: это, вероятно, означает, что у вас есть символическая ссылка 'libboost_filesystem.so', установленная в вашем пути к библиотеке, но большую часть времени эта ссылка отсутствует, так как вы хотите убедиться, что используете один и тот же компилятор и т. следовательно, более длинное libname. – UncleZeiv

+0

Достаточно честный ... и кажется, что вы правы. Спасибо, Ubuntu. –

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