2015-03-30 2 views
1

Я не могу понять ошибку привязки для использования boost :: program_options. Вот пример кода C++:ошибка связывания для boost :: program_options

# sample_code.cpp 
#include <boost/program_options.hpp> 
int main() 
{ 
    boost::program_options::options_description description("Test"); 
} 

Я также установил повышение 1.57.0 с использованием MacPorts на Йосемити 10.10.2. Вот соответствующая библиотека:

/opt/local/lib/libboost_program_options-mt.a 

Давайте скомпилировать и скомпоновать этот код:

alias g++='/opt/local/bin/g++-mp-5 -std=gnu++14 -I/opt/local/include -L/opt/local/lib' 

g++ sample_code.cpp -lboost_program_options-mt 

И он терпит неудачу во время связывания:

Undefined symbols for architecture x86_64: 
"boost::program_options::options_description::options_description(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int, unsigned int)" 
ld: symbol(s) not found for architecture x86_64 

Любые мысли?

+0

Это работает, если вы отмените порядок аргументов компилятора в использовании псевдонимов? Если это так, http://stackoverflow.com/a/24675715/962089 – chris

+0

не очень. Я также пробовал clang ++ и CMake со всеми его аргументами, связанными с повышением, и это не помогло! –

+0

Что значит «на самом деле»? Библиотека _does_ идет после '.cpp'. –

ответ

0

Как указано Petesh в комментариях выше, проблема заключается в том, как MacPorts создает boost с использованием clang++, а не g++.

К сожалению, MacPorts не предлагает никаких gcc вариантов для boost!

0

Решение прост: вы должны скомпилировать boost и свою программу с той же версией компиляторов (или, по крайней мере, должны быть совместимы). Когда мой boost был скомпилирован с GCC 4.8.3, и мой код скомпилирован с GCC 5.3.0, я получил ошибки связывания. После повышения с GCC 5.3.0 проблема связи исчезла.

 Смежные вопросы

  • Нет связанных вопросов^_^