Невозможно найти С++-библиотеку при связывании, ошибка при обработке примера `boost:: program_options`
Я пытаюсь скомпилировать multiple_sources.cpp для компиляции на моем компьютере. Я запускаю Xubuntu Lucid Lynx полностью обновленным.
Он будет компилироваться без проблем с g++ -c multiple_sources.cpp
, но когда я попытаюсь связать и сделать exectuable с g++ multiple_sources.o
, я получаю:
multiple_sources.cpp:(.text+0x3d): undefined reference to `boost::program_options::options_description::m_default_line_length'
multiple_sources.cpp:(.text+0x87): undefined reference to `boost::program_options::options_description::options_description(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)'
multiple_sources.cpp:(.text+0x15a): undefined reference to `boost::program_options::options_description::add_options()'
multiple_sources.cpp:(.text+0x17b): undefined reference to `boost::program_options::options_description_easy_init::operator()(char const*, char const*)'
multiple_sources.cpp:(.text+0x193): undefined reference to `boost::program_options::options_description_easy_init::operator()(char const*, char const*)'
multiple_sources.cpp:(.text+0x1af): undefined reference to `boost::program_options::options_description_easy_init::operator()(char const*, boost::program_options::value_semantic const*, char const*)'
multiple_sources.cpp:(.text+0x1eb): undefined reference to `boost::program_options::options_description::m_default_line_length'
multiple_sources.cpp:(.text+0x252): undefined reference to `boost::program_options::options_description::options_description(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)'
...
et cetera ad nauseum.
У меня установлена библиотека:
>ls -l /usr/lib/libboost_program_options*
-rw-r--r-- 1 root root 640800 2010-03-31 21:19 /usr/lib/libboost_program_options.a
lrwxrwxrwx 1 root root 26 2010-04-09 00:57 /usr/lib/libboost_program_options-mt.a -> libboost_program_options.a
lrwxrwxrwx 1 root root 34 2010-04-09 00:57 /usr/lib/libboost_program_options-mt.so -> libboost_program_options.so.1.40.0
lrwxrwxrwx 1 root root 34 2010-04-09 00:57 /usr/lib/libboost_program_options.so -> libboost_program_options.so.1.40.0
-rw-r--r-- 1 root root 289336 2010-03-31 21:19 /usr/lib/libboost_program_options.so.1.40.0
После прочтения man-страницы g++ я также попробовал:
-
g++ -llibboost_program_options multiple_sources.cpp
-
g++ -llibboost_program_options.a multiple_sources.cpp
-
g++ -llibboost_program_options.so multiple_sources.cpp
- и все вышеперечисленное с
-L/usr/lib
перед -l
Все они терпят неудачу с вариацией на:
/usr/bin/ld: cannot find -llibboost_program_options.so
collect2: ld returned 1 exit status
Что я делаю неправильно?
Ответы
Ответ 1
Параметр -l
неверен; избавиться от префикса lib
и использовать -lboost_program_options
.
Компонент ожидает, что все библиотеки начнутся с lib
, и для этого вы оставите это при указании библиотеки.
Вы также можете указать полный путь к библиотеке в списке файлов без -l
(например, g++ multiple_sources.cpp /usr/lib/libboost_program_options.so
), но для системных библиотек лучше следовать стандарту; они не всегда устанавливаются в /usr/lib
.