Подтвердить что ты не робот

Undefined ссылка на `boost:: program_options:: options_description:: m_default_line_length '

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

undefined ссылка на boost::program_options::options_description::m_default_line_length

Я использую g++ в Ubuntu 12.04. Хотя я проделал некоторое программирование на С++, я новичок в среде разработки Linux (ранее использовали только IDE).

Итак, я сделал основной поиск этой проблемы и нашел некоторые проблемы с связыванием. Я не совсем понял их, поскольку я новичок. Чтение некоторых из этих решений еще больше смутило меня. Моя папка библиотеки ускорений находится в /usr/include. Некоторые решения говорят, что он должен быть в /usr/lib. Но у меня нет никакой дополнительной папки.

Что мне нужно изменить?

4b9b3361

Ответ 1

Если вы установили boost из репо, просто используйте -lboost_program_options, который будет достаточным.
Если вы установили библиотеки boost в какой-либо другой библиотеке, вам нужно указать, что directoty: -L/path/to/lib

В CMake вы можете указать set(CMAKE_CXX_FLAGS "-lboost_program_options")

Однако с помощью CMake вы должны использовать

FIND_PACKAGE(Boost COMPONENTS program_options REQUIRED)
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})
TARGET_LINK_LIBRARIES(target ${Boost_LIBRARIES})

Ответ 2

Были внесены изменения в класс <string> в стандарте С++ 11, который может конфликтовать с версиями библиотеки Boost, которые были скомпилированы компилятором не С++ 11 (например, g++ - 4.8). Попробуйте перекомпилировать boost или использовать версию компилятора С++, которая была использована для компиляции ваших библиотек Boost.

Ответ 3

Где библиотеки ускорения (файлы, заканчивающиеся на .so и .a)? Найдите их, затем добавьте это в свою ссылку: -L/path/to/boost/libs -lname-of-boost-lib

Это должна быть самая распространенная проблема, с которой сталкиваются люди при первом запуске С++. Есть, вероятно, еще тысяча других справочных вопросов undefined по SO. Просто найдите ссылку undefined.

Ответ 4

Обычно библиотеки устанавливаются в /usr/lib (например, в моей системе, /usr/lib/x86_64-linux-gnu/libboost_program_options.so.1.58.0).

Чтобы скомпилировать код, который будет связываться с этими библиотеками, вы обычно используете файлы заголовков, представленные в /usr/include.

В отличие от многих библиотек, Boost не поставляется с файлами pkg-config, поэтому вам нужно добавить флаги компоновщика самостоятельно. С обычными правилами Makefile вам понадобится что-то вроде LDLIBS += -lboost_program_options.

Обратите внимание также, что хотя пакет libboost-dev предоставляет заголовки для program_options, вам также нужно установить libboost-program-options-dev, чтобы получить соответствующую библиотеку.

Ответ 5

Также дважды проверьте, что настройка препроцессорной переменной _GLIBCXX_USE_CXX11_ABI идентична настройке переменной, которая использовалась для компиляции boost. Значение по умолчанию для переменной может отличаться в зависимости от дистрибутива Linux и версии используемого компилятора GNU.

Подробнее см. Dual ABI.