我正在尝试使用带有 g++ 7.1.0 的 yaml-cpp 0.5.3 编译一个相对简单的程序,并且出现链接器错误。最小的程序代码是:
#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 以某种方式实现的问题。