pcl::io::savePCDFile 报错 “未定义的引用”

在Ubuntu 16.04上,编译含有pcl::io::savePCDFile的代码时遇到“未定义的引用”错误。经过排查,尝试更新src/CMakeLists.txt中对pcl的引用,检查pcl库安装无误,最后发现是g++/gcc版本过低(4.8)导致的问题。升级到5.0版本后,成功通过编译。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

电脑平台:Ubuntu 16.04   64位

boost版本:1.58

pcl版本:1.7

g++/gcc版本:4.8(后改成5.0,才可以通过编译)

跟着做高翔的“一起做RGBD-SLAM“第三讲的时候,需要保存生成的点云图,在程序中使用的是下面的一条语句:

pcl::io::savePCDFile( "./data/pointcloud.pcd", *cloud);

但是在在cmake编译的时候 总会报错,报错信息如下:

[ 87%] Building CXX object src/CMakeFiles/generate_pointcloud.dir/generatePointCloud.cpp.o
[100%] Linking CXX executable ../../bin/generate_pointcloud
CMakeFiles/generate_pointcloud.dir/generatePointCloud.cpp.o:在函数‘pcl::PCDWriter::write(std::string const&, pcl::PCLPointCloud2 const&, Eigen::Matrix<float, 4, 1, 0, 4, 1> const&, Eigen::Quaternion<float, 0> const&, bool)’中:
generatePointCloud.cpp:(.text._ZN3pcl9PCDWriter5writeERKSsRKNS_14PCLPointCloud2ERKN5Eigen6MatrixIfLi4ELi1ELi0ELi4ELi1EEERKNS6_10QuaternionIfLi0EEEb[_ZN3pcl9PCDWriter5writeERKSsRKNS_14PCLPointCloud2ERKN5Eigen6MatrixIfLi4ELi1ELi0ELi4ELi1EEERKNS6_10QuaternionIfLi0EEEb]+0xc):对‘pcl::PCDWriter::writeASCII(std::string const&, pcl::PCLPointCloud2 const&, Eigen::Matrix<float, 4, 1, 0, 4, 1> const&, Eigen::Quaternion<float, 
`pcl::io::savePCDFile` 是 Point Cloud Library (PCL) 提供的一个函数,用于将点云数据保存到 PCD 文件格式。如果你想要保存包含中文文件名的 PCD 文件,需要注意的是,由于 PCD 格式本身并不支持 Unicode,特别是对于文件路径部分,它通常只处理 ASCII 字符。 在使用 `savePCDFile` 保存文件时,如果直接包含中文字符可能会出现问题,因为它们在操作系统路径字符串中可能会被错误地编码或者解析。为了避免这个问题,你可以按照以下步骤操作: 1. **转换为 UTF-8 编码**:确保中文字符已转换为 UTF-8 编码形式。例如,在 C++ 中可以使用标准库的 `std::wstring_convert` 和 `std::codecvt_utf8_utf16` 来完成这个转换。 ```cpp #include <locale> #include <codecvt> std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> cvt; std::string utf8Name = cvt.to_bytes(nameWithChinese); ``` 2. **创建宽字符串**:将转换后的 UTF-8 字符串转换成宽字符(wchar_t)字符串,这是许多现代 C++ 库如 Boost、Windows API 所使用的格式。 ```cpp std::wstring wideName(utf8Name.begin(), utf8Name.end()); ``` 3. **保存文件**:使用 `wideName` 替换原始函数中的文件名路径。 ```cpp pcl::io::savePCDFile(wideName.c_str(), cloud); // cloud 是你要保存的点云对象 ``` 但是,请注意,这种方法并不是所有平台都兼容,尤其是那些不支持 UTF-8 或者不友好的操作系统。在跨平台场景下,你可能需要采用其他策略,比如使用相对路径或者临时目录,并确保程序有权限访问目标位置。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值