我尝试使用yaml-cpp 0.5.3和g ++ 7.1.0编译一个相对简单的程序,并且收到链接器错误。最小的程序代码是:
#include <yaml-cpp/yaml.h>
int main(int i_iArg_Count, char * i_lpszArg_Values[])
{
std::string cszFilename = i_lpszArg_Values[1];
YAML::Node cFile;
cFile = YAML::LoadFile(cszFilename);
return 0;
}
此代码在g ++ 4.9.0下编译和链接很好,但在g ++ 7.1.0下我得到错误
/tmp/ccJruju7.o: In function `main':
tyaml.cpp:(.text+0x19e): undefined reference to `YAML::LoadFile(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
我在这种情况下使用的编译命令是g++ tyaml.cpp -lyaml-cpp -o tyaml
。我可以确认它不是库的路径问题 - LIBRARY_PATH
包含libyaml-cpp.a的正确路径,而g ++ 4.9.0使用相同的路径编译它。更完整的代码使用更多的yaml-cpp,并且只有需要std :: string才能导致问题的函数。
libyaml-cpp.a是使用g ++ 7.1.0编译的,所以我不认为这是库本身的问题。我确认该库包含YAML::LoadFile
符号,并采用std::string const &
我无法在我正在使用的系统上继续使用旧版本的g ++。
我已经尝试了yaml-cpp 0.5.1和yaml-cpp 0.5.3,两者都遇到了同样的问题。我怀疑这在某种程度上是std :: string实现的问题。