拒绝掉进同一个坑里
20230420更新
3.拷贝完整程序后在其他路径使用的一些问题
问题1.Cmake报路径不一致错误
解决方案
在新路径中删除build文件夹内的所有文件,重新编译即可
问题2.make[2]: 警告:检测到时钟错误。您的构建版本可能是不完整的
原因可能是:服务器上的文件最后修改时间比当前系统时钟要晚
解决方案
在cpp目录下打开终端输入
find ./ -type f |xargs touch
再编译就正常了
20230417更新
2.使用Cmake编译后相对路径读取不到点云文件
文件目录如下
├── build
│ └── bin
│ ├── Linx
│ └── table_scene_lms400.pcd
├── CMakeLists.txt
├── include
│ ├── func_common.h
│ ├── func_opencv.h
│ └── func_pcl.h
└── src
├── func_common.cpp
├── func_opencv.cpp
├── func_pcl.cpp
└── main.cpp
理论上可执行文件生成在build里,但是使用相对路径找不到同目录下的点云文件,改成绝对路径之后可以使用
解决方案
增加读取当前工作路径和相对路径组合成绝对路径
增加头文件
#include <unistd.h>
#include <limits.h>
代码部分如下
// 读取当前工作路径和相对路径组合成绝对路径
char buffer[PATH_MAX];
// 获取当前工作路径
if (getcwd(buffer, PATH_MAX) == NULL) {
std::cerr << "错误: 无法读取当前工作路径\n";
return;
}
std::string current_working_directory(buffer);
std::string fixed_string = "table_scene_lms400.pcd";
std::string new_absolute_path = current_working_directory + fixed_string;
std::cout << "点云文件绝对路径: " << new_absolute_path << std::endl;
注意事项
使用VSCode调试时,该文件路径需要在当前打开的文件夹下,即在cpp
目录下
直接运行可执行文件时,该文件路径需要在可执行文件Linx
的文件夹下,即在cpp/build/bin
目录下
1.尴尬的编译错误
error: expected initializer before ‘int’
原因在于.h文件该函数声明的上一行函数声明结尾没有分号
解决方案
检查函数定义没有分号的部分增加分号