libconfig ++ -stdlib = libc ++未定义的符号

时间:2013-01-19 16:10:14

标签: c++ c++11 config libc++ clang++

尝试获得一个非常简单的libconfig ++工作示例。但是由于编译器选项'-stdlib = libc ++'和'-std = c ++ 11',我遇到以下链接错误。

环境

Darwin iMac.local 12.2.0

Darwin内核版本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)  

1 个答案:

答案 0 :(得分: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++进行编译。

最可能的解决方法是使用-stdlib=libc++重新编译libconfig ++。