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

libconfig++ -stdlib=libc++ Undefined symbols

本文关键字:符号 未定义 libc++ -stdlib libconfig++      更新时间:2023-10-16

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

达尔文iMac。当地12.2.0

Darwin Kernel Version 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)  

这个错误消息表明这个成员函数:

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++。