C++ yaml cpp编译错误:";对YAML::LoadFile的未定义引用;

C++ yaml cpp编译错误:";对YAML::LoadFile的未定义引用;,c++,g++,yaml-cpp,C++,G++,Yaml Cpp,我正在尝试使用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; }

我正在尝试使用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;
}
/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
我得到了一个类似这样的错误:

// 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;
}
/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
这是在linux机器上,我没有根访问权限。我将git repo克隆到
$HOME/local/yaml cpp
,创建了一个构建目录,运行
cmake-DBUILD\u SHARED\u LIBS=ON..
,然后
make
,创建了文件
libyaml cpp.so.0.6.2
和符号链接
libyaml cpp.so.0.6
。我的cmake是3.11.2版,如果这很重要的话

不确定这是否有帮助,但我首先是由yaml cpp的维护人员作为一个用户运行这个问题,他说

可能是配置错误;如果您询问堆栈溢出,您可能会得到一个答案

我还发现了一个类似的问题,但她重新排列compile命令的顺序对我来说不起作用。无论
-lyaml cpp
是在命令的开头还是结尾,我都会遇到同样的问题


任何帮助都将不胜感激。

@VTT正确地向我指出了cmake和编译器的内容。当我查看原始
cmake
命令的结果时,前两行说

-- The C compiler identification is GNU 4.8.5
-- The CXX compiler identification is GNU 4.8.5
即使
哪个gcc
哪个g++
指向版本5.4.0。我发现,您需要设置
CC
CXX
环境变量来指定不同的编译器。因此,我将cmake命令更改为:

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

现在一切都很好。

您应该将
-lyaml cpp
放在命令行的末尾,在
main.cpp
@VTT之后谢谢,但不幸的是,这是我尝试过的众多编译参数安排之一。我只是再试了一次,得到了同样的结果。嗯,可能是某种二进制不兼容。yaml库导出哪些函数?yaml cpp是否使用
-std=c++11
编译?@VTT尽管当
-lyaml cpp
main.cpp
之前时,还有一个类似以下的错误:
main.cpp:(.text+0x106):未定义对
yaml::operator@VTT我不确定编译yaml cpp时是否使用了
-std=c++11
。我在Makefile中找不到g++。我怎么检查?