libconfig ++ -stdlib = libc ++ Неопределенные символы

Попытка получить очень простой пример работы libconfig ++. Однако я сталкиваюсь со следующей ошибкой ссылки из-за параметров компилятора «-stdlib = libc ++» и «-std = c ++ 11».

Окружающая среда

Дарвин iMac.local 12.2.0

Ядро Дарвина версии 12.2.0

xnu-2050.18.24 ~ 1 / RELEASE_X86_64 x86_64

Источник

  Config cfg;

  cfg.readFile( "example.cfg" );

  string value = "";

  const string& key = "application.base";

  cfg.lookupValue( key, value );

Сборка

clang ++ -o main main.cpp -lconfig ++ -stdlib = libc ++ -std = c ++ 11

Ошибка

Undefined symbols for architecture x86_64:   "libconfig::Config::lookupValue(char   const*, std::__1::basic_string<char, std::__1::char_traits<char>,   std::__1::allocator<char> >&) const", referenced from:  
      libconfig::Config::lookupValue(std::__1::basic_string<char,   std::__1::char_traits<char>, std::__1::allocator<char> > const&,   std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&)   const in main-mFa01w.o ld: symbol(s) not found for architecture x86_64 clang:   error:   linker command failed with exit code 1 (use -v to see invocation)  

person Ben Crowhurst    schedule 19.01.2013    source источник


Ответы (1)


Сообщение об ошибке указывает, что эта функция-член:

libconfig::Config::lookupValue(const std::string& path, std::string& value) const;

был скомпилирован с -stdlib=libc++ (вероятно, как встроенный, но я предполагаю). И это, в свою очередь, вызывает эту функцию-член:

libconfig::Config::lookupValue(char const* path, std::string& value) const

Однако эта последняя функция не была скомпилирована с -stdlib=libc++.

Наиболее вероятное решение - перекомпилировать libconfig ++ с -stdlib=libc++.

person Howard Hinnant    schedule 19.01.2013
comment
Да, я безуспешно пытался использовать несколько конфигураций сборки. Так что я струсил и прибежал в SO. Спасибо за ваше время. - person Ben Crowhurst; 19.01.2013
comment
Попробуйте nm -gm libconfig ++. Dylib | c ++ filter | grep lookupValue. Если вы видите __1 libconfig ++. Dylib содержит символы libc ++. В противном случае в нем есть символы libstdc ++. - person Howard Hinnant; 19.01.2013