yaml-cpp compile error: "undefined reference to YAML::LoadFile"

yaml-cpp compile error: "undefined reference to YAML::LoadFile"

我正在尝试使用 yaml-cpp 获得一个简单的测试程序 运行,看起来像这样:

// main.cpp

#include <iostream>
#include "yaml-cpp/yaml.h"

int main(int argc, const char *argv[])
{
     YAML::Node config = YAML::LoadFile("config.yaml");
     std::cout << config << std::endl;
}

我正在尝试使用此命令进行编译:

g++ -lyaml-cpp -L$(HOME)/local/yaml-cpp/build -I$(HOME)/local/yaml-cpp/include -std=c++11 main.cpp

我收到如下所示的错误:

/tmp/ccz0D5ol.o: In function `main':
main.cpp:(.text+0xdd): undefined reference to `YAML::LoadFile(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
collect2: error: ld returned 1 exit status
make: *** [all] Error 1

这是我正在使用的 g++:

$ g++ --version
g++ (GCC) 5.4.0
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

这是在我没有 root 权限的 linux 机器上。我将 git 存储库克隆到 $HOME/local/yaml-cpp,创建了一个构建目录,运行 cmake -DBUILD_SHARED_LIBS=ON ..,然后是 make,它创建了文件 libyaml-cpp.so.0.6.2 和符号链接libyaml-cpp.so.0.6libyaml-cpp.so。如果重要的话,我的 cmake 是 3.11.2 版。

不确定这是否有帮助,但我首先 运行 这个问题由 yaml-cpp 的维护者作为 github issue,他说

It's likely a configuration error; you might be able to get an answer if you ask on Stack Overflow.

我也发现了一个类似的问题,问题几乎完全相同,但是她的 solution of rear运行ging the order of the compile command 对我不起作用。无论 -lyaml-cpp 是在命令的开头还是结尾,我都会遇到同样的问题。

如有任何帮助,我们将不胜感激。

@VTT 将我指向 cmake 和编译器的东西是正确的。当我查看原始 cmake 命令的结果时,前两行表示

-- The C compiler identification is GNU 4.8.5
-- The CXX compiler identification is GNU 4.8.5

即使 which gccwhich g++ 指向版本 5.4.0。我发现 this SO answer which points to this cmake FAQ page 说你需要设置 CCCXX 环境变量来指定不同的编译器。所以我将 cmake 命令更改为:

CC=$(which gcc) CXX=$(which g++) cmake -DBUILD_SHARED_LIBS=ON ..

现在一切正常。