生产需求背景:由于部分器件的动态链接只支持32位dll,导致整体编译需要同步成win32
一般深度相机导入数据后,需要对点云数据后处理。此文选型PCL库。
从github上查到release包能支持win32的最新版本PCL1.9.1(打包的VTK8.1)。由于VTK8.1废弃了一些旧接口,导致如下错误。
pcl::visualization::PCLVisualizer *p;
p->removePointCloud("source");
运行removePointCloud时,VTK中调用deleteFunction删除指针。就异常退出了,具体笔者没有深入。
但VTK8.0则没有问题,可能一些旧接口仍然保留。故更改PCL1.8.1(打包的VTK8.0)
确定PCL1.8.1后,在github上release有的搭配是
PCL-1.8.1-AllInOne-msvc2017-win32.exe
pcl-1.8.1-pdb-msvc2017-win32.zip
至此,重装系统(Win10)后,从VS2017+QT5.12.12(文章编辑时最新支持链接VS2017 32bit的QT5安装包)。
由于默认PCL allInOne中 VTK不支持QT。(若仅需VS开发,则不需重编译VTK)
故需要Cmake + VTK-v8.0.1源码,编译VTK。笔者参考了百度。
此后,编译QT时由于QT pro文件中,默认
CONFIG += c++17故Boost库报错,有如下错误编号,供大家参考:
.hpp(): error C2143: 语法错误: 缺少“,”(在“<”的前面)
.hpp(): error C2518: 关键字“typename”在基类列表中非法;被忽略
.h(): error C2039: “auto_ptr”: 不是“std”的成员
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\stack(218): note: 参见“std”的声明
.h(): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
.h(): error C2238: 意外的标记位于“;”之前
解决方法:
将CONFIG += c++14 即可
===============另附,VS下PCL编译报错的解决方案:=======================
C3861 “pop_t”:找不到标识符
Resolution:
typedef unsigned long long pop_t; //xmip
添加到错误行之前
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 C2988 不可识别的模板声明/定义 PCL1 d:\pcl1.8.1\3rdparty\boost\include\boost-1_64\boost\typeof\msvc\typeof_impl.hpp 125
错误 C2143 语法错误: 缺少“;”(在“<”的前面) PCL1 d:\pcl1.8.1\3rdparty\boost\include\boost-1_64\boost\typeof\msvc\typeof_impl.hpp 125
错误 C2913 显式专用化;“boost::type_of::id2type_impl”不是类模板的专用化 PCL1 d:\pcl1.8.1\3rdparty\boost\include\boost-1_64\boost\typeof\msvc\typeof_impl.hpp 125
错误 C2059 语法错误:“<” PCL1 d:\pcl1.8.1\3rdparty\boost\include\boost-1_64\boost\typeof\msvc\typeof_impl.hpp 125
错误 C2334 “{”的前面有意外标记;跳过明显的函数体 PCL1 d:\pcl1.8.1\3rdparty\boost\include\boost-1_64\boost\typeof\msvc\typeof_impl.hpp 126
Resolution:
源代码(如main.cpp,非报错文件typeof_impl.hpp)顶部加 #define BOOST_TYPEOF_EMULATION 或 #define BOOST_TYPEOF_COMPLIANT
















