将yaml-cpp 0.5.x库与g ++ 7.1.0链接

时间:2017-10-10 20:03:47

标签: gcc stdstring yaml-cpp g++4.9 gcc7

我尝试使用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实现的问题。

0 个答案:

没有答案