G++ не может найти библиотеки повышения. Я говорю, что они на виду

Я пытаюсь создать код. Вот ошибка, которую я получаю:

main.o: In function `__static_initialization_and_destruction_0':
/home/jmbeck/Downloads/boost_1_48_0/boost/system/error_code.hpp:214: undefined reference to `boost::system::generic_category()'

Есть еще, но я не думаю, что это актуально.

Вот команда сборки:

g++ -I/home/jmbeck/Downloads/boost_1_48_0 
    -L/home/jmbeck/Downloads/boost_1_48_0/stage/lib 
    -lm 
    -lboost_system 
    -lboost_thread
    -lboost_regex 
    main.cpp

Каталог /home/jmbeck/Downloads/boost

main.o: In function `__static_initialization_and_destruction_0':
/home/jmbeck/Downloads/boost_1_48_0/boost/system/error_code.hpp:214: undefined reference to `boost::system::generic_category()'
48_0/stage/lib содержит ожидаемые файлы:

libboost_system.a
libboost_system.so@
libboost_system.so.1.48.0*
libboost_thread.a
libboost_thread.so@
libboost_thread.so.1.48.0* 
libboost_regex.a
libboost_regex.so@
libboost_regex.so.1.48.0*
... etc...

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

Что я делаю не так?


person jmbeck    schedule 19.01.2012    source источник
comment
Вы можете использовать параметр -Wall для g++, и вы можете использовать -v, чтобы понять, что он делает, и -H, чтобы понять файлы заголовков, которые он уже нашел. Ваша ошибка связана с ошибкой компоновки (отсутствует библиотека или неправильный порядок).   -  person Basile Starynkevitch    schedule 19.01.2012
comment
Мой настоящий Makefile использует -Wall и -v (и -Wextra). Я хотел перейти к основам. Но это хороший совет для будущих зрителей; мне раньше помогало.   -  person jmbeck    schedule 20.01.2012


Ответы (2)


Попробуйте поместить библиотеки после main.cpp.

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

person James McLaughlin    schedule 19.01.2012
comment
Спасибо. Это сделало это. Я полагаю, что в какой-то момент в прошлом я обновил gcc. Эти же файлы Makefile отлично работали несколько месяцев назад. Это расстраивало. Еще раз спасибо за подсказку! - person jmbeck; 20.01.2012
comment
Вероятно, об этом следует сообщить как об ошибке. - person Crashworks; 20.01.2012

Часто компоновщики требуют, чтобы библиотеки были упорядочены от наиболее зависимых к наименее зависимым (я полагаю, что MS этого не делает). В этом случае, вероятно, поток или регулярное выражение зависят от системы, поэтому вам нужно указать -lsystem после другой библиотеки повышения, которая зависит от нее.

person Mark B    schedule 19.01.2012