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
. Но у меня нет никакой дополнительной папки.
Что мне нужно изменить?
Ответы
Ответ 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.