c++学习记录--ubuntu18.04 yaml-cpp使用报错

文章讲述了在Ubuntu18.04系统中编译yaml-cpp库时遇到的CMake错误和库链接问题,以及如何解决这些问题。首先,作者指出了安装过程中CMakeCache.txt路径不匹配的错误,并提供了删除并重建build目录的解决方案。其次,对于库链接错误,作者发现系统已有libyaml-cpp.so,通过修改项目库路径解决了问题。最后,作者提到了libyaml-cpp.so和libyaml-cpp.a的区别,并表示未找到卸载系统已安装库的方法。

c++学习记录--ubuntu18.04 yaml-cpp编译和库引用报错

一、错误--安装过程报错

 从github上去项目之后,执行如下安装过程:
cd yaml-cpp-master
mkdir -p build
cd build
cmake ..
make -j6

结果出现
**CMake Error: The current CMakeCache.txt directory /home/.../build/CMakeCache.txt is different than the directory /home/.../build where CMakeCache.txt was created. This may result in binaries being created in the wrong place. If you are not sure, reedit the CMakeCache.txt CMake Error: The source "/home/.../CMakeLists.txt" does not match the source "/home/.../CMakeLists.txt" used to generate cache. Re-run cmake with a different source directory.**
从报错提示可以看到,这是因为当前CMakeCache.txt的路径和它之前被创建的路径不同了。

解决办法如下:

1.退出build目录:
cd ..
2.删除build目录(要确保build中只存放了编译生成的中间文件)
rm -rf build
3.新建build目录
mkdir build
4.进入build
cd build
5.重新cmake …
cmake ..

如此可以解决安装过程中的问题

2、错误--库链接

编译成功之后,在项目CMakeLists.txt中,添加
aux_source_directory(include/third-party/yaml-cpp YAML_SRC) link_directories(${PROJECT_SOURCE_DIR}/lib/yaml-cpp) target_link_libraries(${PROJECT_NAME} libyaml-cpp.a)
并将 libyaml-cpp.a文件复制到${PROJECT_SOURCE_DIR}/lib/yaml-cpp中,在编译过程中遇到下面的问题:
In function 'YAML::Node::Scalar[abi:cxx11]() const': undefined reference to 'YAML::detail::node_data::empty_scalar[abi:cxx11]'
出错的原因可能是安装ROS之类的软件时,安装过yaml-cpp,使用locate定位一下系统中相关的库。
locate libyaml-cpp.so
结果为
/usr/lib/x86_64-linux-gnu/libyaml-cpp.so /usr/lib/x86_64-linux-gnu/libyaml-cpp.so.0.5 /usr/lib/x86_64-linux-gnu/libyaml-cpp.so.0.5.2
解决方法一:include中相关头文件的引用,见链接: C++项目经验(6)——yaml-cpp的安装、报错解决及使用

在确保头文件引用无误后,将/usr/lib/x86_64-linux-gnu,添加到项目库路径之中,
set(lib_DIR /usr/lib/x84_64-linux-gnu) include_directories(${PROJECT_SOURCE_DIR}/include/third-party/yaml-cpp) link_directories(${lib_DIR})
上述问题解决了。

3、后记

1、libyaml-cpp.so和 libyaml-cpp.a的使用有一定的区别。
2、没有找到删除系统已安装libyaml-cpp的方法,同时不想影响ROS的使用。
3、本人尝试了自己方法解决的自己的问题,希望能对你有所帮助。交流请联系:xiangzi.peng@163.com

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值