尝试获得一个非常简单的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)
答案 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 ++。