c++ yaml-cpp编译错误:“未定义对YAML::LoadFile的引用”

whhtz7ly  于 2022-11-19  发布在  其他
关注(0)|答案(1)|浏览(461)

我正在尝试使用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.

这是在一个linux机器上,我没有root权限。我克隆了git repo到$HOME/local/yaml-cpp,创建了一个build目录,运行cmake -DBUILD_SHARED_LIBS=ON ..,然后运行make,创建了文件libyaml-cpp.so.0.6.2和符号链接libyaml-cpp.so.0.6libyaml-cpp.so
我不确定这是否有帮助,但我首先由yaml-cpp的维护者以github issue的形式运行了这个问题,他说
可能是配置错误;如果您询问堆栈溢出,您可能会得到答案。
我也发现了一个类似的问题,几乎是完全相同的问题,但她的solution重新排列编译命令的顺序对我不起作用。
任何帮助都将不胜感激。

f2uvfpb9

f2uvfpb91#

@VTT 向 我 指出 了 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 指向 这个 cmake 常见 问题 页面 , 它 说 您 需要 设置 CCCXX 环境 变量 来 指定 不同 的 编译 器 。 因此 我 将 我 的 cmake 命令 更改 为 :

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

格式
现在 一切 都 很 好 。

相关问题