2

我需要让 yaml-cpp 运行,但它不会编译没有错误。我正在使用 Ubuntu 12.04 和 yaml-cpp-0.5.1 from here,它们是使用“cmake”和“sudo make install”安装的,以确保将库正确复制到所需路径“/usr/local/include/” yaml-cpp'。

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

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

我基本上是从这里的这个页面得到的。如果我现在跑

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*)'

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

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

4

2 回答 2

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在路径变量中检查了这些目录。

我可能会选择选项 #1,因为我不确定你为什么需要同时安装这两个选项。我想您的包管理器想要安装的其他一些包可能取决于 yaml-cpp 0.2.7,这可能是一个问题。

于 2013-06-13T03:26:11.063 回答
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。

export LD_LIBRARY_PATH=<.so 的路径>:$LD_LIBRARY_PATH

于 2021-06-10T07:45:36.543 回答