Win10 + qt5.6.3 + pcl1.8.0 環境搭建(安裝、配置)


網上很多帖都是在 VS 下搭建的 qt 和 pcl 庫,而本人是在 Qt Creator 下搭建的環境,所以過程有些坎坷,特此記錄一下。

先甩個鍋咯~~~由於機器的差別,所以可能會出現別的錯誤,這里分享的是我遇到的錯誤噢。。。

首先給出系統環境以及配置信息:

系統:Win10 64位

QT庫版本:5.6.3 MSVC

PCL庫版本:1.8.0 MSVC

簡單說一下概念,Qt Creator 是開發環境(IDE),qt 庫和 pcl 庫是第三方庫,MinGW、MSVC 是兩種不同的編譯器。這兩個第三方庫是需要經過編譯才能使用的,而為了省去大家的麻煩,官方提供了已經被某些版本的編譯器編譯過的庫,直接安裝就可以使用,稱為 預編譯版。所以,才會有不同版本的預編譯版的庫,在安裝的時候要選擇同一種編譯器編譯的庫才最保險。當然,不嫌麻煩的話,完全可以自己重新編譯一下,這個大家就自己查資料吧。。。

好了,說說編譯器版本選擇的問題,網上有帖分析這兩種編譯器,不過個人感覺還是蘿卜白菜各有所愛。我為什么用 MSVC 版的呢?因為 PCL 官網提供的 Windows 下面的預編譯版庫只有 MSVC 版的,我下的這個也是從網上找的鏈接。還有一個原因是,我之前在電腦上裝過 VS2013,安裝它的時候,電腦上就自動安裝了 MSVC2013 編譯器。

好,下面進入正題,安裝過程(由於是傻瓜式安裝沒什么好說的,就不詳細展開了):

1. MSVC 編譯器的問題

MSVC 是 Microsoft Visual C++ 的縮寫。由於之前我已經安裝了 VS 2013,所以就不需要再安裝了,電腦上已經有 MSVC2013 編譯器了。如果沒有安裝 VS 的話,要么安裝 VS,要么只安裝 MSVC 編譯器,網上可以查得到很多帖。我的是 2013 版本,所以以下均以此為依據。如果是 VS2015 的話,那就是 MSVC2015 版本。

2. CDB 調試器的問題

編譯器是用來編譯程序的,而調試器是 debug 程序的時候要用到的,要在 Qt Creator 里面調試 Windows 程序,就需要安裝相應的調試器。

有一個東西叫 Windows Debugging Tools,里面有一個 cdb.exe,我們需要的就是這個東西。當然,不需要調試程序的朋友們,就不用安裝這個調試工具了。

在安裝的時候,有個界面是選擇安裝哪些東西的,只選擇那個 debugging tools 就行了,參考網頁:

https://blog.csdn.net/FORmingtian/article/details/84526971

安裝路徑默認就行了,不然 Qt Creator 不能自動檢測到,還得手動設置。

3. 安裝 Qt Creator + qt 庫

Qt 官方提供了一個安裝程序,里面包含了 Qt Creator、qt 庫以及編譯所需要的各種工具,這是各版本下載鏈接。我下載的是:

qt-opensource-windows-x86-msvc2013-5.6.3.exe

直接運行,安裝路徑最好不要有中文和空格,然后一路 next 安裝就可以了,其中有一個界面是選擇需要安裝哪些東西,反正我是全選了。

4. 安裝 PCL 庫

PCL 官網只給了 MSVC 版本的預編譯庫,而且版本還不新,我是從網上找的一個網址下的 1.8.0 的庫:

PCL-1.8.0-AllInOne-msvc2013-win32.exe

這個安裝程序從名字就可以看出來,是一個究極傻瓜式安裝包,里面包含了 Boost、Eigen、FLANN、OpenNI2、Qhull、VTK,當然都是與這個版本 pcl 匹配的版本。

直接運行安裝程序,同樣的,安裝路徑不要有中文空格。安裝過程中,有一個界面是選擇是否要創建環境變量的,默認是不創建,應該選第二個,對所有用戶創建。

安裝完成后,還要設置額外的環境變量才可以正常使用,不然 Qt 程序總會報錯 “程序無法啟動”,這個是我的環境變量(Path)截圖:

設置好環境變量后,電腦重啟。

然后打開 Qt Creator,別跟我說找不到圖標,小娜那里搜索qt就行了。

打開 工具--選項--構建和運行--構建套件,下面這樣就沒問題了:

其中,調試器那一欄,如果是默認路徑安裝的前面的 Windows SDK,那它會自動檢測到,如果改了路徑,這里就手動設置一下。前面也說過了,沒有調試器也可以運行程序,release 方式運行就行。但是編譯器那一欄必須有,不然程序無法編譯運行!!

5. Pro 文件

我是要調用 PCL,所以內容如下(根據自己的項目名啥的自己根據需要選擇復制):

#-------------------------------------------------
#
# Project created by QtCreator 2019-02-18T20:56:54
#
#-------------------------------------------------

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = zaoshengjiqiren
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp \
    loginwindow.cpp \
    settingswindow.cpp

HEADERS  += mainwindow.h \
    loginwindow.h \
    settingswindow.h


INCLUDEPATH += $(PCL_ROOT)/include/pcl-1.8 \
               $(PCL_ROOT)/include/pcl-1.8/pcl \
               $(PCL_ROOT)/3rdParty/Boost/include/boost-1_59 \
               $(PCL_ROOT)/3rdParty/Eigen/eigen3 \
               #${PCL_ROOT}/3rdParty/FLANN/include \
               $(PCL_ROOT)/3rdParty/FLANN/include/flann \
               D:/pcl-1.8.0/OpenNI2/Include \
               $(PCL_ROOT)/3rdParty/Qhull/include \
               $(PCL_ROOT)/3rdParty/VTK/include/vtk-7.0

CONFIG(debug,debug|release){

LIBS += -L$(PCL_ROOT)/lib\
        #-lpcl_apps_debug\
        -lpcl_common_debug\
        -lpcl_features_debug\
        -lpcl_filters_debug\
        -lpcl_io_debug\
        -lpcl_io_ply_debug\
        -lpcl_kdtree_debug\
        -lpcl_keypoints_debug\
        -lpcl_ml_debug\
        -lpcl_octree_debug\
        -lpcl_outofcore_debug\
        -lpcl_people_debug\
        -lpcl_recognition_debug\
        -lpcl_registration_debug\
        -lpcl_sample_consensus_debug\
        -lpcl_search_debug\
        -lpcl_segmentation_debug\
        #-lpcl_simulation_debug\
        -lpcl_stereo_debug\
        -lpcl_surface_debug\
        -lpcl_tracking_debug\
        -lpcl_visualization_debug\

LIBS += -L$(PCL_ROOT)/3rdParty/Boost/lib\
        -llibboost_atomic-vc120-mt-gd-1_59\
        -llibboost_chrono-vc120-mt-gd-1_59\
        -llibboost_container-vc120-mt-gd-1_59\
        -llibboost_context-vc120-mt-gd-1_59\
        -llibboost_coroutine-vc120-mt-gd-1_59\
        -llibboost_date_time-vc120-mt-gd-1_59\
        -llibboost_exception-vc120-mt-gd-1_59\
        -llibboost_filesystem-vc120-mt-gd-1_59\
        -llibboost_graph-vc120-mt-gd-1_59\
        -llibboost_iostreams-vc120-mt-gd-1_59\
        -llibboost_locale-vc120-mt-gd-1_59\
        -llibboost_log-vc120-mt-gd-1_59\
        -llibboost_log_setup-vc120-mt-gd-1_59\
        -llibboost_math_c99-vc120-mt-gd-1_59\
        -llibboost_math_c99f-vc120-mt-gd-1_59\
        -llibboost_math_c99l-vc120-mt-gd-1_59\
        -llibboost_math_tr1-vc120-mt-gd-1_59\
        -llibboost_math_tr1f-vc120-mt-gd-1_59\
        -llibboost_math_tr1l-vc120-mt-gd-1_59\
        -llibboost_mpi-vc120-mt-gd-1_59\
        -llibboost_prg_exec_monitor-vc120-mt-gd-1_59\
        -llibboost_program_options-vc120-mt-gd-1_59\
        -llibboost_random-vc120-mt-gd-1_59\
        -llibboost_regex-vc120-mt-gd-1_59\
        -llibboost_serialization-vc120-mt-gd-1_59\
        -llibboost_signals-vc120-mt-gd-1_59\
        -llibboost_system-vc120-mt-gd-1_59\
        -llibboost_test_exec_monitor-vc120-mt-gd-1_59\
        -llibboost_thread-vc120-mt-gd-1_59\
        -llibboost_timer-vc120-mt-gd-1_59\
        -llibboost_unit_test_framework-vc120-mt-gd-1_59\
        -llibboost_wave-vc120-mt-gd-1_59\
        -llibboost_wserialization-vc120-mt-gd-1_59

LIBS += -L$(PCL_ROOT)/3rdParty/FLANN/lib\
        -lflann-gd\
        -lflann_cpp_s-gd\
        -lflann_s-gd

LIBS += -LD:/pcl-1.8.0/OpenNI2/Lib\
        -lOpenNI2

LIBS += -L$(PCL_ROOT)/3rdParty/Qhull/lib\
        -lqhull-gd\
        -lqhullcpp-gd\
        -lqhullstatic-gd\
        -lqhullstatic_r-gd\
        -lqhull_p-gd\
        -lqhull_r-gd

LIBS += -L$(PCL_ROOT)/3rdParty/VTK/lib\
        -lvtkalglib-7.0-gd\
        -lvtkChartsCore-7.0-gd\
        -lvtkCommonColor-7.0-gd\
        -lvtkCommonComputationalGeometry-7.0-gd\
        -lvtkCommonCore-7.0-gd\
        -lvtkCommonDataModel-7.0-gd\
        -lvtkCommonExecutionModel-7.0-gd\
        -lvtkCommonMath-7.0-gd\
        -lvtkCommonMisc-7.0-gd\
        -lvtkCommonSystem-7.0-gd\
        -lvtkCommonTransforms-7.0-gd\
        -lvtkDICOMParser-7.0-gd\
        -lvtkDomainsChemistry-7.0-gd\
        -lvtkDomainsChemistryOpenGL2-7.0-gd\
        -lvtkexoIIc-7.0-gd\
        -lvtkexpat-7.0-gd\
        -lvtkFiltersAMR-7.0-gd\
        -lvtkFiltersCore-7.0-gd\
        -lvtkFiltersExtraction-7.0-gd\
        -lvtkFiltersFlowPaths-7.0-gd\
        -lvtkFiltersGeneral-7.0-gd\
        -lvtkFiltersGeneric-7.0-gd\
        -lvtkFiltersGeometry-7.0-gd\
        -lvtkFiltersHybrid-7.0-gd\
        -lvtkFiltersHyperTree-7.0-gd\
        -lvtkFiltersImaging-7.0-gd\
        -lvtkFiltersModeling-7.0-gd\
        -lvtkFiltersParallel-7.0-gd\
        -lvtkFiltersParallelImaging-7.0-gd\
        -lvtkFiltersProgrammable-7.0-gd\
        -lvtkFiltersSelection-7.0-gd\
        -lvtkFiltersSMP-7.0-gd\
        -lvtkFiltersSources-7.0-gd\
        -lvtkFiltersStatistics-7.0-gd\
        -lvtkFiltersTexture-7.0-gd\
        -lvtkFiltersVerdict-7.0-gd\
        -lvtkfreetype-7.0-gd\
        -lvtkGeovisCore-7.0-gd\
        -lvtkglew-7.0-gd\
        -lvtkGUISupportQt-7.0-gd\
        -lvtkGUISupportQtSQL-7.0-gd\
        -lvtkhdf5-7.0-gd\
        -lvtkhdf5_hl-7.0-gd\
        -lvtkImagingColor-7.0-gd\
        -lvtkImagingCore-7.0-gd\
        -lvtkImagingFourier-7.0-gd\
        -lvtkImagingGeneral-7.0-gd\
        -lvtkImagingHybrid-7.0-gd\
        -lvtkImagingMath-7.0-gd\
        -lvtkImagingMorphological-7.0-gd\
        -lvtkImagingSources-7.0-gd\
        -lvtkImagingStatistics-7.0-gd\
        -lvtkImagingStencil-7.0-gd\
        -lvtkInfovisCore-7.0-gd\
        -lvtkInfovisLayout-7.0-gd\
        -lvtkInteractionImage-7.0-gd\
        -lvtkInteractionStyle-7.0-gd\
        -lvtkInteractionWidgets-7.0-gd\
        -lvtkIOAMR-7.0-gd\
        -lvtkIOCore-7.0-gd\
        -lvtkIOEnSight-7.0-gd\
        -lvtkIOExodus-7.0-gd\
        -lvtkIOExport-7.0-gd\
        -lvtkIOGeometry-7.0-gd\
        -lvtkIOImage-7.0-gd\
        -lvtkIOImport-7.0-gd\
        -lvtkIOInfovis-7.0-gd\
        -lvtkIOLegacy-7.0-gd\
        -lvtkIOLSDyna-7.0-gd\
        -lvtkIOMINC-7.0-gd\
        -lvtkIOMovie-7.0-gd\
        -lvtkIONetCDF-7.0-gd\
        -lvtkIOParallel-7.0-gd\
        -lvtkIOParallelXML-7.0-gd\
        -lvtkIOPLY-7.0-gd\
        -lvtkIOSQL-7.0-gd\
        -lvtkIOVideo-7.0-gd\
        -lvtkIOXML-7.0-gd\
        -lvtkIOXMLParser-7.0-gd\
        -lvtkjpeg-7.0-gd\
        -lvtkjsoncpp-7.0-gd\
        -lvtklibxml2-7.0-gd\
        -lvtkmetaio-7.0-gd\
        -lvtkNetCDF-7.0-gd\
        -lvtkNetCDF_cxx-7.0-gd\
        -lvtkoggtheora-7.0-gd\
        -lvtkParallelCore-7.0-gd\
        -lvtkpng-7.0-gd\
        -lvtkproj4-7.0-gd\
        -lvtkRenderingAnnotation-7.0-gd\
        -lvtkRenderingContext2D-7.0-gd\
        -lvtkRenderingContextOpenGL2-7.0-gd\
        -lvtkRenderingCore-7.0-gd\
        -lvtkRenderingFreeType-7.0-gd\
        -lvtkRenderingImage-7.0-gd\
        -lvtkRenderingLabel-7.0-gd\
        -lvtkRenderingLOD-7.0-gd\
        -lvtkRenderingOpenGL2-7.0-gd\
        -lvtkRenderingQt-7.0-gd\
        -lvtkRenderingVolume-7.0-gd\
        -lvtkRenderingVolumeOpenGL2-7.0-gd\
        -lvtksqlite-7.0-gd\
        -lvtksys-7.0-gd\
        -lvtktiff-7.0-gd\
        -lvtkverdict-7.0-gd\
        -lvtkViewsContext2D-7.0-gd\
        -lvtkViewsCore-7.0-gd\
        -lvtkViewsInfovis-7.0-gd\
        -lvtkViewsQt-7.0-gd\
        -lvtkzlib-7.0-gd

}else {

LIBS += -L$(PCL_ROOT)/lib\
#       -lpcl_apps_release\
        -lpcl_common_release\
        -lpcl_features_release\
        -lpcl_filters_release\
        -lpcl_io_release\
        -lpcl_io_ply_release\
        -lpcl_kdtree_release\
        -lpcl_keypoints_release\
        -lpcl_ml_release\
        -lpcl_octree_release\
        -lpcl_outofcore_release\
        -lpcl_people_release\
        -lpcl_recognition_release\
        -lpcl_registration_release\
        -lpcl_sample_consensus_release\
        -lpcl_search_release\
        -lpcl_segmentation_release\
#       -lpcl_simulation_release\
        -lpcl_stereo_release\
        -lpcl_surface_release\
        -lpcl_tracking_release\
        -lpcl_visualization_release\

LIBS += -L$(PCL_ROOT)/3rdParty/Boost/lib\
        -llibboost_atomic-vc120-mt-1_59\
        -llibboost_chrono-vc120-mt-1_59\
        -llibboost_container-vc120-mt-1_59\
        -llibboost_context-vc120-mt-1_59\
        -llibboost_coroutine-vc120-mt-1_59\
        -llibboost_date_time-vc120-mt-1_59\
        -llibboost_exception-vc120-mt-1_59\
        -llibboost_filesystem-vc120-mt-1_59\
        -llibboost_graph-vc120-mt-1_59\
        -llibboost_iostreams-vc120-mt-1_59\
        -llibboost_locale-vc120-mt-1_59\
        -llibboost_log-vc120-mt-1_59\
        -llibboost_log_setup-vc120-mt-1_59\
        -llibboost_math_c99-vc120-mt-1_59\
        -llibboost_math_c99f-vc120-mt-1_59\
        -llibboost_math_c99l-vc120-mt-1_59\
        -llibboost_math_tr1-vc120-mt-1_59\
        -llibboost_math_tr1f-vc120-mt-1_59\
        -llibboost_math_tr1l-vc120-mt-1_59\
        -llibboost_mpi-vc120-mt-1_59\
        -llibboost_prg_exec_monitor-vc120-mt-1_59\
        -llibboost_program_options-vc120-mt-1_59\
        -llibboost_random-vc120-mt-1_59\
        -llibboost_regex-vc120-mt-1_59\
        -llibboost_serialization-vc120-mt-1_59\
        -llibboost_signals-vc120-mt-1_59\
        -llibboost_system-vc120-mt-1_59\
        -llibboost_test_exec_monitor-vc120-mt-1_59\
        -llibboost_thread-vc120-mt-1_59\
        -llibboost_timer-vc120-mt-1_59\
        -llibboost_unit_test_framework-vc120-mt-1_59\
        -llibboost_wave-vc120-mt-1_59\
        -llibboost_wserialization-vc120-mt-1_59

LIBS += -L$(PCL_ROOT)/3rdParty/FLANN/lib\
        -lflann\
        -lflann_cpp_s\
        -lflann_s

LIBS += -LD:/pcl-1.8.0/OpenNI2/Lib\
        -lOpenNI2

LIBS += -L$(PCL_ROOT)/3rdParty/Qhull/lib\
        -lqhull\
        -lqhullcpp\
        -lqhullstatic\
        -lqhullstatic_r\
        -lqhull_p\
        -lqhull_r

LIBS += -L$(PCL_ROOT)/3rdParty/VTK/lib\
        -lvtkalglib-7.0\
        -lvtkChartsCore-7.0\
        -lvtkCommonColor-7.0\
        -lvtkCommonComputationalGeometry-7.0\
        -lvtkCommonCore-7.0\
        -lvtkCommonDataModel-7.0\
        -lvtkCommonExecutionModel-7.0\
        -lvtkCommonMath-7.0\
        -lvtkCommonMisc-7.0\
        -lvtkCommonSystem-7.0\
        -lvtkCommonTransforms-7.0\
        -lvtkDICOMParser-7.0\
        -lvtkDomainsChemistry-7.0\
        -lvtkDomainsChemistryOpenGL2-7.0\
        -lvtkexoIIc-7.0\
        -lvtkexpat-7.0\
        -lvtkFiltersAMR-7.0\
        -lvtkFiltersCore-7.0\
        -lvtkFiltersExtraction-7.0\
        -lvtkFiltersFlowPaths-7.0\
        -lvtkFiltersGeneral-7.0\
        -lvtkFiltersGeneric-7.0\
        -lvtkFiltersGeometry-7.0\
        -lvtkFiltersHybrid-7.0\
        -lvtkFiltersHyperTree-7.0\
        -lvtkFiltersImaging-7.0\
        -lvtkFiltersModeling-7.0\
        -lvtkFiltersParallel-7.0\
        -lvtkFiltersParallelImaging-7.0\
        -lvtkFiltersProgrammable-7.0\
        -lvtkFiltersSelection-7.0\
        -lvtkFiltersSMP-7.0\
        -lvtkFiltersSources-7.0\
        -lvtkFiltersStatistics-7.0\
        -lvtkFiltersTexture-7.0\
        -lvtkFiltersVerdict-7.0\
        -lvtkfreetype-7.0\
        -lvtkGeovisCore-7.0\
        -lvtkglew-7.0\
        -lvtkGUISupportQt-7.0\
        -lvtkGUISupportQtSQL-7.0\
        -lvtkhdf5-7.0\
        -lvtkhdf5_hl-7.0\
        -lvtkImagingColor-7.0\
        -lvtkImagingCore-7.0\
        -lvtkImagingFourier-7.0\
        -lvtkImagingGeneral-7.0\
        -lvtkImagingHybrid-7.0\
        -lvtkImagingMath-7.0\
        -lvtkImagingMorphological-7.0\
        -lvtkImagingSources-7.0\
        -lvtkImagingStatistics-7.0\
        -lvtkImagingStencil-7.0\
        -lvtkInfovisCore-7.0\
        -lvtkInfovisLayout-7.0\
        -lvtkInteractionImage-7.0\
        -lvtkInteractionStyle-7.0\
        -lvtkInteractionWidgets-7.0\
        -lvtkIOAMR-7.0\
        -lvtkIOCore-7.0\
        -lvtkIOEnSight-7.0\
        -lvtkIOExodus-7.0\
        -lvtkIOExport-7.0\
        -lvtkIOGeometry-7.0\
        -lvtkIOImage-7.0\
        -lvtkIOImport-7.0\
        -lvtkIOInfovis-7.0\
        -lvtkIOLegacy-7.0\
        -lvtkIOLSDyna-7.0\
        -lvtkIOMINC-7.0\
        -lvtkIOMovie-7.0\
        -lvtkIONetCDF-7.0\
        -lvtkIOParallel-7.0\
        -lvtkIOParallelXML-7.0\
        -lvtkIOPLY-7.0\
        -lvtkIOSQL-7.0\
        -lvtkIOVideo-7.0\
        -lvtkIOXML-7.0\
        -lvtkIOXMLParser-7.0\
        -lvtkjpeg-7.0\
        -lvtkjsoncpp-7.0\
        -lvtklibxml2-7.0\
        -lvtkmetaio-7.0\
        -lvtkNetCDF-7.0\
        -lvtkNetCDF_cxx-7.0\
        -lvtkoggtheora-7.0\
        -lvtkParallelCore-7.0\
        -lvtkpng-7.0\
        -lvtkproj4-7.0\
        -lvtkRenderingAnnotation-7.0\
        -lvtkRenderingContext2D-7.0\
        -lvtkRenderingContextOpenGL2-7.0\
        -lvtkRenderingCore-7.0\
        -lvtkRenderingFreeType-7.0\
        -lvtkRenderingImage-7.0\
        -lvtkRenderingLabel-7.0\
        -lvtkRenderingLOD-7.0\
        -lvtkRenderingOpenGL2-7.0\
        -lvtkRenderingQt-7.0\
        -lvtkRenderingVolume-7.0\
        -lvtkRenderingVolumeOpenGL2-7.0\
        -lvtksqlite-7.0\
        -lvtksys-7.0\
        -lvtktiff-7.0\
        -lvtkverdict-7.0\
        -lvtkViewsContext2D-7.0\
        -lvtkViewsCore-7.0\
        -lvtkViewsInfovis-7.0\
        -lvtkViewsQt-7.0\
        -lvtkzlib-7.0
}

注意:

1. 里面 INCLUDEPATH 設置,把 OpenNI2 路徑改成自己的。

2. 里面我有幾行是注釋的,因為這個內容我是從別的帖粘過來的,而我安裝的這個版本的 PCL 有兩個庫是沒有的。

3. 理論上,以 release 方式編譯運行程序,只需要添加 release 版的庫就行了。這個 CONFIG(debug, debug|release) 的意思是根據程序需要自動選擇 debug 版本還是 release 版本庫(先添加的是 debug,后面的是 release 版,看庫名字也可以看出來)。這個 OpenNI 好像不支持調試,所以 debug 方式不能成功運行程序,我這里是這樣的,所以我一直是以 release 方式運行。如果你們知道解決方法,歡迎下面留個言告知一下嘻嘻~~

好啦,到這里就結束啦,開啟你的 Qt 之旅吧~~~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM