Не может найти библиотеку C++ при соединении, ошибка compliling 'повышение:: пример 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, std::allocator > 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, std::allocator > const&, unsigned int)'
...

и так далее реклама 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

После чтения 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

Что я делаю неправильно?

17
задан Sled 19 September 2016 в 14:36
поделиться

1 ответ

Параметр -l неверен; избавьтесь от префикса lib и используйте -lboost_program_options .

Компоновщик ожидает, что все библиотеки будут начинаться с lib , и вы не должны указывать это при указании библиотеки.

Вы также можете включить полный путь к библиотеке в список файлов без -l (например, g ++ multiple_sources.cpp /usr/lib/libboost_program_options.so), но для системных библиотек лучше следовать соглашению; они не всегда устанавливаются в / usr / lib .

25
ответ дан 30 November 2019 в 13:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: