yaml-cpp不能用g ++编译

时间:2013-06-12 09:21:31

标签: yaml-cpp

我需要让yaml-cpp运行,但它不会在没有错误的情况下编译。我正在使用来自here的Ubuntu 12.04和yaml-cpp-0.5.1,它是使用'cmake'和'sudo make install'安装的,以确保库被正确地复制到所需的路径'/ usr /本地/包括/ YAML-CPP”。

出于测试目的,我尝试编译几行代码

#include "yaml-cpp/yaml.h"
int main(int argc, char **argv) {
    YAML::Node config = YAML::Load("[1,2,3]");
    return 0;
}

我基本上从这个页面here得到了。如果我现在运行

g++ -o yaml_test yaml_test.cpp

g++ -I/usr/local/include -L/usr/local/lib -lyaml-cpp -o yaml_test yaml_test.cpp

我总是得到相同的错误消息

/tmp/ccgvKdN2.o: In function `main':
yaml_test.cpp:(.text+0x1d): undefined reference to `YAML::Load(char const*)'

据我所知,这意味着尚未找到这些库。

这里发生了什么?为什么不编译?

2 个答案:

答案 0 :(得分:0)

根据您的评论,您的系统中已经安装了yaml-cpp 0.2.7。您有两种选择:

  1. 从系统中删除现有的包。我不确定aptitude究竟是如何工作的,但您可以尝试删除文件/usr/local/lib/libyaml-cpp.*/usr/local/include/yaml-cpp/,然后从头开始安装yaml-cpp 0.5.1。 (请注意,您可能也与头文件存在冲突,但幸运的是它已正确解析。我将删除0.2.7标头,然后再安装0.5.1。)

  2. 您可以将0.5.1安装到一个单独的位置(例如$HOME/lib$HOME/include),然后确保在路径/usr/local之前检查这些目录变量

  3. 我可能会选择#1选项,因为我不确定你为什么需要安装这两个选项。我想包装管理器想要安装的其他软件包可能依赖于yaml-cpp 0.2.7,这可能是个问题。

答案 1 :(得分:0)

使用 ldd 命令检查所有必需的库是否正确链接。

ldd ./yaml_test

    linux-vdso.so.1 =>  (0x00007fff631bc000)
    **libyaml-cpp.so.0.6 => not found**
    libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f6e99a93000)
    libm.so.6 => /lib64/libm.so.6 (0x00007f6e99791000)
    libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f6e9957b000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f6e991b7000)
    /lib64/ld-linux-x86-64.so.2 (0x00005614b86c1000)

如果缺少任何 lib 链接,请导出 LD_LIBRARY_PATH。

导出 LD_LIBRARY_PATH=<.so 的路径>:$LD_LIBRARY_PATH