VS2019+PCL1.91+Qt5.12.9+VTK8.1.0 配置记录

VS2019+PCL1.91+Qt5.12.9+VTK8.1.0 配置记录

安装配置

安装配置参考:
https://blog.csdn.net/qq_33676772/article/details/83478255
https://blog.csdn.net/xiaolong361/article/details/89361561

报错

运行代码报错:

 error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __cdecl QVTKWidget::QVTKWidget(class QWidget *,class QFlags<enum Qt::WindowType>)" (__imp_??0QVTKWidget@@QEAA@PEAVQWidget@@V?$QFlags@W4WindowType@Qt@@@@@Z),该符号在函数 "public: void __cdecl Ui_QtTest02Class::setupUi(class QMainWindow *)" (?setupUi@Ui_QtTest02Class@@QEAAXPEAVQMainWindow@@@Z) 中被引用
 error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: virtual __cdecl QVTKWidget::~QVTKWidget(void)" (__imp_??1QVTKWidget@@UEAA@XZ),该符号在函数 "public: virtual void * __cdecl QVTKWidget::`scalar deleting destructor'(unsigned int)" (??_GQVTKWidget@@UEAAPEAXI@Z) 中被引用
 error LNK2001: 无法解析的外部符号 "public: virtual class QVTKInteractor * __cdecl QVTKWidget::GetInteractor(void)" (?GetInteractor@QVTKWidget@@UEAAPEAVQVTKInteractor@@XZ)
 error LNK2001: 无法解析的外部符号 "public: virtual class vtkRenderWindow * __cdecl QVTKWidget::GetRenderWindow(void)" (?GetRenderWindow@QVTKWidget@@UEAAPEAVvtkRenderWindow@@XZ)
 error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl QVTKWidget::SetRenderWindow(class vtkRenderWindow *)" (?SetRenderWindow@QVTKWidget@@UEAAXPEAVvtkRenderWindow@@@Z)
 error LNK2001: 无法解析的外部符号 "public: virtual class vtkImageData * __cdecl QVTKWidget::cachedImage(void)" (?cachedImage@QVTKWidget@@UEAAPEAVvtkImageData@@XZ)
 error LNK2001: 无法解析的外部符号 "protected: virtual void __cdecl QVTKWidget::contextMenuEvent(class QContextMenuEvent *)" (?contextMenuEvent@QVTKWidget@@MEAAXPEAVQContextMenuEvent@@@Z)
 error LNK2001: 无法解析的外部符号 "protected: virtual void __cdecl QVTKWidget::deferRender(void)" (?deferRender@QVTKWidget@@MEAAXXZ)
 error LNK2001: 无法解析的外部符号 "protected: virtual void __cdecl QVTKWidget::doDeferredRender(void)" (?doDeferredRender@QVTKWidget@@MEAAXXZ)
 error LNK2001: 无法解析的外部符号 "protected: virtual void __cdecl QVTKWidget::dragEnterEvent(class QDragEnterEvent *)" (?dragEnterEvent@QVTKWidget@@MEAAXPEAVQDragEnterEvent@@@Z)
 error LNK2001: 无法解析的外部符号 "protected: virtual void __cdecl QVTKWidget::dragLeaveEvent(class QDragLeaveEvent *)" (?dragLeaveEvent@QVTKWidget@@MEAAXPEAVQDragLeaveEvent@@@Z)
 error LNK2001: 无法解析的外部符号 "protected: virtual void __cdecl QVTKWidget::dragMoveEvent(class QDragMoveEvent *)" (?dragMoveEvent@QVTKWidget@@MEAAXPEAVQDragMoveEvent@@@Z)
 error LNK2001: 无法解析的外部符号 "protected: virtual void __cdecl QVTKWidget::dropEvent(class QDropEvent *)" (?dropEvent@QVTKWidget@@MEAAXPEAVQDropEvent@@@Z)
 error LNK2001: 无法解析的外部符号 "protected: virtual void __cdecl QVTKWidget::enterEvent(class QEvent *)" (?enterEvent@QVTKWidget@@MEAAXPEAVQEvent@@@Z)
 error LNK2001: 无法解析的外部符号 "protected: virtual bool __cdecl QVTKWidget::event(class QEvent *)" (?event@QVTKWidget@@MEAA_NPEAVQEvent@@@Z)
 error LNK2001: 无法解析的外部符号 "protected: virtual void __cdecl QVTKWidget::focusInEvent(class QFocusEvent *)" (?focusInEvent@QVTKWidget@@MEAAXPEAVQFocusEvent@@@Z)
 error LNK2001: 无法解析的外部符号 "protected: virtual void __cdecl QVTKWidget::focusOutEvent(class QFocusEvent *)" (?focusOutEvent@QVTKWidget@@MEAAXPEAVQFocusEvent@@@Z)
 error LNK2001: 无法解析的外部符号 "public: virtual bool __cdecl QVTKWidget::isAutomaticImageCacheEnabled(void)const " (?isAutomaticImageCacheEnabled@QVTKWidget@@UEBA_NXZ)
 error LNK2001: 无法解析的外部符号 "protected: virtual void __cdecl QVTKWidget::keyPressEvent(class QKeyEvent *)" (?keyPressEvent@QVTKWidget@@MEAAXPEAVQKeyEvent@@@Z)
 error LNK2001: 无法解析的外部符号 "protected: virtual void __cdecl QVTKWidget::keyReleaseEvent(class QKeyEvent *)" (?keyReleaseEvent@QVTKWidget@@MEAAXPEAVQKeyEvent@@@Z)
 error LNK2001: 无法解析的外部符号 "protected: virtual void __cdecl QVTKWidget::leaveEvent(class QEvent *)" (?leaveEvent@QVTKWidget@@MEAAXPEAVQEvent@@@Z)
 error LNK2001: 无法解析的外部符号 "public: virtual double __cdecl QVTKWidget::maxRenderRateForImageCache(void)const " (?maxRenderRateForImageCache@QVTKWidget@@UEBANXZ)
 error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const * __cdecl QVTKWidget::metaObject(void)const " (?metaObject@QVTKWidget@@UEBAPEBUQMetaObject@@XZ)
 error LNK2001: 无法解析的外部符号 "protected: virtual void __cdecl QVTKWidget::mouseMoveEvent(class QMouseEvent *)" (?mouseMoveEvent@QVTKWidget@@MEAAXPEAVQMouseEvent@@@Z)
 error LNK2001: 无法解析的外部符号 "protected: virtual void __cdecl QVTKWidget::mousePressEvent(class QMouseEvent *)" (?mousePressEvent@QVTKWidget@@MEAAXPEAVQMouseEvent@@@Z)
 error LNK2001: 无法解析的外部符号 "protected: virtual void __cdecl QVTKWidget::mouseReleaseEvent(class QMouseEvent *)" (?mouseReleaseEvent@QVTKWidget@@MEAAXPEAVQMouseEvent@@@Z)
 error LNK2001: 无法解析的外部符号 "protected: virtual void __cdecl QVTKWidget::moveEvent(class QMoveEvent *)" (?moveEvent@QVTKWidget@@MEAAXPEAVQMoveEvent@@@Z)
 error LNK2001: 无法解析的外部符号 "protected: virtual bool __cdecl QVTKWidget::nativeEvent(class QByteArray const &,void *,long *)" (?nativeEvent@QVTKWidget@@MEAA_NAEBVQByteArray@@PEAXPEAJ@Z)
 error LNK2001: 无法解析的外部符号 "protected: virtual bool __cdecl QVTKWidget::paintCachedImage(void)" (?paintCachedImage@QVTKWidget@@MEAA_NXZ)
 error LNK2001: 无法解析的外部符号 "public: virtual class QPaintEngine * __cdecl QVTKWidget::paintEngine(void)const " (?paintEngine@QVTKWidget@@UEBAPEAVQPaintEngine@@XZ)
 error LNK2001: 无法解析的外部符号 "protected: virtual void __cdecl QVTKWidget::paintEvent(class QPaintEvent *)" (?paintEvent@QVTKWidget@@MEAAXPEAVQPaintEvent@@@Z)
 error LNK2001: 无法解析的外部符号 "public: virtual int __cdecl QVTKWidget::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@QVTKWidget@@UEAAHW4Call@QMetaObject@@HPEAPEAX@Z)
 error LNK2001: 无法解析的外部符号 "public: virtual void * __cdecl QVTKWidget::qt_metacast(char const *)" (?qt_metacast@QVTKWidget@@UEAAPEAXPEBD@Z)
 error LNK2001: 无法解析的外部符号 "protected: virtual void __cdecl QVTKWidget::resizeEvent(class QResizeEvent *)" (?resizeEvent@QVTKWidget@@MEAAXPEAVQResizeEvent@@@Z)
 error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl QVTKWidget::setAutomaticImageCacheEnabled(bool)" (?setAutomaticImageCacheEnabled@QVTKWidget@@UEAAX_N@Z)
 error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl QVTKWidget::setMaxRenderRateForImageCache(double)" (?setMaxRenderRateForImageCache@QVTKWidget@@UEAAXN@Z)
 error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl QVTKWidget::showEvent(class QShowEvent *)" (?showEvent@QVTKWidget@@UEAAXPEAVQShowEvent@@@Z)
 error LNK2001: 无法解析的外部符号 "protected: virtual void __cdecl QVTKWidget::wheelEvent(class QWheelEvent *)" (?wheelEvent@QVTKWidget@@MEAAXPEAVQWheelEvent@@@Z)
1>D:\Program\Workspace\workC\vs\QtTest02\x64\Debug\\QtTest02.exe : fatal error LNK1120: 38 个无法解析的外部命令

参考

报错参考:
https://www.codenong.com/cs105459386/
https://github.com/PointCloudLibrary/pcl/issues/3810,不明白说的是哪个CMakeList文件要修改
http://vtk.1045678.n5.nabble.com/Inresolved-external-for-QVTKWidget-in-VTK-8-0-1-td5745200.html

明显是lib库问题,但是一直纠结于QVTKWidget的函数实现找不到,反复看了QVTKWidgetPlugin.lib有没有copy过来,还把所有的lib、dll直接扔到了项目下面,依旧不行。
重新cmake了一遍,其中修改了OPENGL2->OPENGL,还是没有用(此时还没关注到lib库变化,双眼只盯住了QVTKWidgetPlugin),打算逛逛google看看,看到报错参考链接3,谈到了vtkGUISupportQtOpenGL-8.1-gd.lib,去看了眼有这个,但是没加上去,于是就把vtkGUISupportQtXXX都加上去了,…然后bingo。
将VTK中所有的lib都重新理了一遍,加上来了。

opencv_world412.lib
kinect20.lib
pcl_common_debug.lib
pcl_features_debug.lib
pcl_filters_debug.lib
pcl_io_debug.lib
pcl_io_ply_debug.lib
pcl_kdtree_debug.lib
pcl_keypoints_debug.lib
pcl_ml_debug.lib
pcl_octree_debug.lib
pcl_outofcore_debug.lib
pcl_people_debug.lib
pcl_recognition_debug.lib
pcl_registration_debug.lib
pcl_sample_consensus_debug.lib
pcl_search_debug.lib
pcl_segmentation_debug.lib
pcl_stereo_debug.lib
pcl_surface_debug.lib
pcl_tracking_debug.lib
pcl_visualization_debug.lib
vtkalglib-8.1-gd.lib
vtkChartsCore-8.1-gd.lib
vtkCommonColor-8.1-gd.lib
vtkCommonComputationalGeometry-8.1-gd.lib
vtkCommonCore-8.1-gd.lib
vtkCommonDataModel-8.1-gd.lib
vtkCommonExecutionModel-8.1-gd.lib
vtkCommonMath-8.1-gd.lib
vtkCommonMisc-8.1-gd.lib
vtkCommonSystem-8.1-gd.lib
vtkCommonTransforms-8.1-gd.lib
vtkDICOMParser-8.1-gd.lib
vtkDomainsChemistry-8.1-gd.lib
vtkexoIIc-8.1-gd.lib
vtkexpat-8.1-gd.lib
vtkFiltersAMR-8.1-gd.lib
vtkFiltersCore-8.1-gd.lib
vtkFiltersExtraction-8.1-gd.lib
vtkFiltersFlowPaths-8.1-gd.lib
vtkFiltersGeneral-8.1-gd.lib
vtkFiltersGeneric-8.1-gd.lib
vtkFiltersGeometry-8.1-gd.lib
vtkFiltersHybrid-8.1-gd.lib
vtkFiltersHyperTree-8.1-gd.lib
vtkFiltersImaging-8.1-gd.lib
vtkFiltersModeling-8.1-gd.lib
vtkFiltersParallel-8.1-gd.lib
vtkFiltersParallelImaging-8.1-gd.lib
vtkFiltersPoints-8.1-gd.lib
vtkFiltersProgrammable-8.1-gd.lib
vtkFiltersSelection-8.1-gd.lib
vtkFiltersSMP-8.1-gd.lib
vtkFiltersSources-8.1-gd.lib
vtkFiltersStatistics-8.1-gd.lib
vtkFiltersTexture-8.1-gd.lib
vtkFiltersTopology-8.1-gd.lib
vtkFiltersVerdict-8.1-gd.lib
vtkfreetype-8.1-gd.lib
vtkGeovisCore-8.1-gd.lib
vtkgl2ps-8.1-gd.lib
vtkhdf5-8.1-gd.lib
vtkhdf5_hl-8.1-gd.lib
vtkImagingColor-8.1-gd.lib
vtkImagingCore-8.1-gd.lib
vtkImagingFourier-8.1-gd.lib
vtkImagingGeneral-8.1-gd.lib
vtkImagingHybrid-8.1-gd.lib
vtkImagingMath-8.1-gd.lib
vtkImagingMorphological-8.1-gd.lib
vtkImagingSources-8.1-gd.lib
vtkImagingStatistics-8.1-gd.lib
vtkImagingStencil-8.1-gd.lib
vtkInfovisCore-8.1-gd.lib
vtkInfovisLayout-8.1-gd.lib
vtkInteractionImage-8.1-gd.lib
vtkInteractionStyle-8.1-gd.lib
vtkInteractionWidgets-8.1-gd.lib
vtkIOAMR-8.1-gd.lib
vtkIOCore-8.1-gd.lib
vtkIOEnSight-8.1-gd.lib
vtkIOExodus-8.1-gd.lib
vtkIOExport-8.1-gd.lib
vtkIOExportOpenGL-8.1-gd.lib
vtkIOGeometry-8.1-gd.lib
vtkIOImage-8.1-gd.lib
vtkIOImport-8.1-gd.lib
vtkIOInfovis-8.1-gd.lib
vtkIOLegacy-8.1-gd.lib
vtkIOLSDyna-8.1-gd.lib
vtkIOMINC-8.1-gd.lib
vtkIOMovie-8.1-gd.lib
vtkIONetCDF-8.1-gd.lib
vtkIOParallel-8.1-gd.lib
vtkIOParallelXML-8.1-gd.lib
vtkIOPLY-8.1-gd.lib
vtkIOSQL-8.1-gd.lib
vtkIOTecplotTable-8.1-gd.lib
vtkIOVideo-8.1-gd.lib
vtkIOXML-8.1-gd.lib
vtkIOXMLParser-8.1-gd.lib
vtkjpeg-8.1-gd.lib
vtkjsoncpp-8.1-gd.lib
vtklibharu-8.1-gd.lib
vtklibxml2-8.1-gd.lib
vtklz4-8.1-gd.lib
vtkmetaio-8.1-gd.lib
vtkNetCDF-8.1-gd.lib
vtknetcdfcpp-8.1-gd.lib
vtkoggtheora-8.1-gd.lib
vtkParallelCore-8.1-gd.lib
vtkpng-8.1-gd.lib
vtkproj4-8.1-gd.lib
vtkRenderingAnnotation-8.1-gd.lib
vtkRenderingContext2D-8.1-gd.lib
vtkRenderingContextOpenGL-8.1-gd.lib
vtkRenderingCore-8.1-gd.lib
vtkRenderingFreeType-8.1-gd.lib
vtkRenderingGL2PS-8.1-gd.lib
vtkRenderingImage-8.1-gd.lib
vtkRenderingLabel-8.1-gd.lib
vtkRenderingLOD-8.1-gd.lib
vtkRenderingOpenGL-8.1-gd.lib
vtkRenderingQt-8.1-gd.lib
vtkRenderingVolume-8.1-gd.lib
vtkRenderingVolumeOpenGL-8.1-gd.lib
vtksqlite-8.1-gd.lib
vtksys-8.1-gd.lib
vtktiff-8.1-gd.lib
vtkverdict-8.1-gd.lib
vtkViewsContext2D-8.1-gd.lib
vtkViewsCore-8.1-gd.lib
vtkViewsInfovis-8.1-gd.lib
vtkViewsQt-8.1-gd.lib
vtkzlib-8.1-gd.lib
opengl32.lib
QVTKWidgetPlugin-gd.lib
vtkGUISupportQt-8.1-gd.lib
vtkGUISupportQtOpenGL-8.1-gd.lib
vtkGUISupportQtSQL-8.1-gd.lib
vtkRenderingLIC-8.1-gd.lib

小结

经过测试比较,其实是第一次OPENGL2 cmake没有生成vtkGUISupportQt-8.1-gd.lib等文件,此次link报错主要由vtkGUISupportQt-8.1-gd.lib缺失导致,居然不是QVTKWidgetPlugin.lib。

附上编译的vtk链接:VTK8.1.0 编译版 支持QT,对应PCL1.9.1.


Linux系统cmake编译报错

/usr/bin/ld: CMakeFiles/point_cloud_annotation_tool.dir/visualizer.cpp.o: in function `vtkRenderingOpenGL2_AutoInit::vtkRenderingOpenGL2_AutoInit()':
visualizer.cpp:(.text._ZN28vtkRenderingOpenGL2_AutoInitC2Ev[_ZN28vtkRenderingOpenGL2_AutoInitC5Ev]+0x11): undefined reference to `vtkRenderingGL2PSOpenGL2_AutoInit_Construct()'
/usr/bin/ld: CMakeFiles/point_cloud_annotation_tool.dir/visualizer.cpp.o: in function `vtkRenderingOpenGL2_AutoInit::~vtkRenderingOpenGL2_AutoInit()':
visualizer.cpp:(.text._ZN28vtkRenderingOpenGL2_AutoInitD2Ev[_ZN28vtkRenderingOpenGL2_AutoInitD5Ev]+0x11): undefined reference to `vtkRenderingGL2PSOpenGL2_AutoInit_Destruct()'
/usr/bin/ld: CMakeFiles/point_cloud_annotation_tool.dir/visualizer.cpp.o: in function `Ui_MainWindow::setupUi(QMainWindow*)':
visualizer.cpp:(.text._ZN13Ui_MainWindow7setupUiEP11QMainWindow[_ZN13Ui_MainWindow7setupUiEP11QMainWindow]+0xb93): undefined reference to `QVTKWidget::QVTKWidget(QWidget*, QFlags<Qt::WindowType>)'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/point_cloud_annotation_tool.dir/build.make:315: point_cloud_annotation_tool] Error 1
make[1]: *** [CMakeFiles/Makefile2:126: CMakeFiles/point_cloud_annotation_tool.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
/usr/bin/ld: CMakeFiles/QVTKWidgetTest.dir/QVTKWidgetTest.cxx.o: in function `vtkRenderingOpenGL2_AutoInit::vtkRenderingOpenGL2_AutoInit()':
QVTKWidgetTest.cxx:(.text._ZN28vtkRenderingOpenGL2_AutoInitC2Ev[_ZN28vtkRenderingOpenGL2_AutoInitC5Ev]+0x11): undefined reference to `vtkRenderingGL2PSOpenGL2_AutoInit_Construct()'
/usr/bin/ld: CMakeFiles/QVTKWidgetTest.dir/QVTKWidgetTest.cxx.o: in function `vtkRenderingOpenGL2_AutoInit::~vtkRenderingOpenGL2_AutoInit()':
QVTKWidgetTest.cxx:(.text._ZN28vtkRenderingOpenGL2_AutoInitD2Ev[_ZN28vtkRenderingOpenGL2_AutoInitD5Ev]+0x11): undefined reference to `vtkRenderingGL2PSOpenGL2_AutoInit_Destruct()'
/usr/bin/ld: CMakeFiles/QVTKWidgetTest.dir/QVTKWidgetTest.cxx.o: in function `Ui_MainWindow::setupUi(QMainWindow*)':
QVTKWidgetTest.cxx:(.text._ZN13Ui_MainWindow7setupUiEP11QMainWindow[_ZN13Ui_MainWindow7setupUiEP11QMainWindow]+0x7f1): undefined reference to `QVTKWidget::QVTKWidget(QWidget*, QFlags<Qt::WindowType>)'
collect2: error: ld returned 1 exit status
make[2]: *** [test/CMakeFiles/QVTKWidgetTest.dir/build.make:195: test/QVTKWidgetTest] Error 1
make[1]: *** [CMakeFiles/Makefile2:180: test/CMakeFiles/QVTKWidgetTest.dir/all] Error 2
make: *** [Makefile:84: all] Error 2

依据链接2提示修改cmakelist中pcl和vtk的find顺序,vtkRenderingGL2PSOpenGL2_AutoInit_Construct错误消失,但是QVTKWidget还有,好像还真是cmake问题

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值