我需要让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*)'
据我所知,这意味着尚未找到这些库。
这里发生了什么?为什么不编译?
答案 0 :(得分:0)
根据您的评论,您的系统中已经安装了yaml-cpp 0.2.7。您有两种选择:
从系统中删除现有的包。我不确定aptitude
究竟是如何工作的,但您可以尝试删除文件/usr/local/lib/libyaml-cpp.*
和/usr/local/include/yaml-cpp/
,然后从头开始安装yaml-cpp 0.5.1。 (请注意,您可能也与头文件存在冲突,但幸运的是它已正确解析。我将删除0.2.7标头,然后再安装0.5.1。)
您可以将0.5.1安装到一个单独的位置(例如$HOME/lib
和$HOME/include
),然后确保在路径/usr/local
之前检查这些目录变量
我可能会选择#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