2014-01-21 3 views
4

Я плохо разбираюсь в компиляции в командной строке. Моя проблема заключается в невозможности скомпилировать простой проект, который зависит от Boost. Ниже приведен журнал моих попробовать:G ++ не может найти форматированную библиотеку

$ g++ -Wall test.cpp -o main 
/tmp/ccCTvBYE.o: In function `__static_initialization_and_destruction_0(int, int)': 
test.cpp:(.text+0x6b): undefined reference to `boost::system::generic_category()' 
test.cpp:(.text+0x77): undefined reference to `boost::system::generic_category()' 
test.cpp:(.text+0x83): undefined reference to `boost::system::system_category()' 
/tmp/ccCTvBYE.o: In function `boost::asio::error::get_system_category()': 
test.cpp:(.text._ZN5boost4asio5error19get_system_categoryEv[_ZN5boost4asio5error19get_system_categoryEv]+0x5): undefined reference to `boost::system::system_category()' 
collect2: error: ld returned 1 exit status 

Итак, there я нашел инструкцию по добавлению -lboost_system или -lboost_system-mt. Я получил следующее:

$ g++ -lboost_system -Wall test.cpp -o main                              
/usr/bin/ld: cannot find -lboost_system 
collect2: error: ld returned 1 exit status 

$ g++ -lboost_system-mt -Wall test.cpp -o main                             
/usr/bin/ld: cannot find -lboost_system-mt 
collect2: error: ld returned 1 exit status 

Я пытался найти boost_system библиотеку.

$ /sbin/ldconfig -p | grep boost_system 
    libboost_system.so.1.53.0 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libboost_system.so.1.53.0 

Затем я неудачно попытался следующие

$ g++ -I"/home/third_party/boost/" -L"/usr/lib/x86_64-linux-gnu/" -lboost_system -Wall test.cpp -o main 
/usr/bin/ld: cannot find -lboost_system 
collect2: error: ld returned 1 exit status 

Теперь я застрял. Как сформировать команду для компиляции?

Edit:

Следующая Trying не помогло тоже.

ln -s /usr/lib/x86_64-linux-gnu/libboost_system.so.1.53.0 /usr/lib/x86_64-linux-gnu/libboost_system.so 
ldconfig -n /usr/lib/x86_64-linux-gnu/ 

$ ll /usr/lib/x86_64-linux-gnu/ | grep boost_system 
lrwxrwxrwx 1 root root  51 янв. 21 19:47 libboost_system.so -> /usr/lib/x86_64-linux-gnu/libboost_system.so.1.53.0 
-rw-r--r-- 1 root root 14536 окт. 13 07:14 libboost_system.so.1.53.0 

$ g++ -I"/home/third_party/boost/" -L"/usr/lib/x86_64-linux-gnu/" -lboost_system -Wall -m64 boost_async.cpp -o main 
/tmp/ccE20K2W.o: In function `__static_initialization_and_destruction_0(int, int)': 
test.cpp:(.text+0x6b): undefined reference to `boost::system::generic_category()' 
test.cpp:(.text+0x77): undefined reference to `boost::system::generic_category()' 
test.cpp:(.text+0x83): undefined reference to `boost::system::system_category()' 
/tmp/ccE20K2W.o: In function `boost::asio::error::get_system_category()': 
test.cpp:(.text._ZN5boost4asio5error19get_system_categoryEv[_ZN5boost4asio5error19get_system_categoryEv]+0x5): undefined reference to `boost::system::system_category()' 
collect2: error: ld returned 1 exit status 
+0

@Jmc - Спасибо. К сожалению, это не помогло. – Loom

+0

Вы используете 'bjam'? –

+0

Извините ... мои идеи не были хорошими. Я думал, может быть, это номера версий после имени библиотеки. Вы можете попытаться создать ссылку на libboost_system.so, которая ссылается на libboost_system.so.1.53.0 в каталоге/usr/lib/x86_64-linux-gnu/ – Jmc

ответ

9

Если поместить директиву компоновщика -lboost_system в конце командной строки следующим образом:

g++ -I"/home/third_party/boost/" -L"/usr/lib/x86_64-linux-gnu/" -Wall -m64 boost_async.cpp -o main -lboost_system

это должно решить проблему. Спасибо Colin D Bennett и wesley.mesquita за разъяснение этого ответа.

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