本人安裝過程中主要問題出現在:鏈接庫>附加依賴項與預處理器
一、包含目錄
應查看自己的安裝目錄,不能盲目完全照搬網上教程,include後需再寫一級
二、附加依賴項
由於pcl中.lib 較多,且網上教程複製黏貼的.lib極有可能不同,所以給出快速提取.lib的方法:
引用自:http://www.cnblogs.com/blog-vincent-0x1F7/p/9646358.html
各個庫目錄中的所有.lib文件就是我們的附加依賴項,但是這裏要把他們區分爲debug模式下的依賴項和release模式下的依賴項,而且.lib文件數量繁多,自己複製這些文件名還要分成debug、release兩撥確實太多了。我們可以用批處理命令來幫我們執行。
觀察各個庫目錄可知調試模式和發行模式的分別,在%PCL_ROOT%\lib下的.lib文件加了debug和release來區分,%PCL_ROOT%\3rdParty\Boost\lib下的以有gd的爲debug模式否則爲release模式,其他各個庫目錄也都有類似規律,所以可以在各個庫目錄下寫批處理文件導出.lib依賴項:
1.在%PCL_ROOT%\lib下新建文本文檔,改後綴名爲.bat,筆記本打開編輯如下內容:
@echo off
for %%I in (*.lib) do echo %%I>>all.txt //解釋:對每一個(*.lib)通配符匹配到的文件名I,顯示I到文件all.txt,之後的語句類似理解就可
for %%I in (*debug.lib) do echo %%I>>adebug.txt
for %%I in (*release.lib) do echo %%I>>arelease.txt
pause
則會生成adebug.txt保存debug模式下的依賴項、arelease.txt保存release模式下的依賴項、all.txt保存所有依賴項,如下:
2.在%PCL_ROOT%\3rdParty\Boost\lib下編寫:
@echo off
for %%I in (*.lib) do echo %%I>>all.txt
for %%I in (*mt-gd-1_64.lib) do echo %%I>>adebug.txt
for %%I in (*mt-1_64.lib) do echo %%I>>arelease.txt
pause
3.
在%PCL_ROOT%\3rdParty\OpenNI2\Lib下只有一個不必用批處理,自己抄一下名稱就好;在%PCL_ROOT%\3rdParty\FLANN\lib和%PCL_ROOT%\3rdParty\Qhull\lib下因爲不太多故將所有.lib導出到一個all.txt文件然後自己根據有沒有_d區分debug和release版本:
@echo off
for %%I in (*.lib) do echo %%I>>all.txt
pause
4.在%PCL_ROOT%\3rdParty\VTK\lib下根據有無-gd區分debug和release,編寫bat文件如下:
@echo off
for %%I in (*.lib) do echo %%I>>all.txt
for %%I in (*8.0.lib) do echo %%I>>arelease.txt
for %%I in (*c++.lib) do echo %%I>>arelease.txt
for %%I in (*-gd.lib) do echo %%I>>adebug.txt
pause
最後把所有debug模式下依賴項彙總,把所有release模式下的依賴項彙總即得到設置中所需要的依賴項。另外如果想更簡單一點可以把以上的輸出文件名改爲同一個,這樣可以所有debug的輸出到一個debug.txt,所有release的輸出到一個release.txt,不過要注意的是文件名要使用絕對路徑。
三、預處理器
運行一個測試程序很有可能會拋出error c4996錯誤,
只需在項目-屬性-C/C++-預處理器-預處理器定義中添加_SCL_SECURE_NO_WARNINGS就可以。
四、例程:顯示兔子點雲
點雲下載鏈接:https://pan.baidu.com/s/15LZVm2Kb-tKb1CVofoLSZA 提取碼:s03u
#include<pcl/visualization/cloud_viewer.h>
#include<iostream>//標準C++庫中的輸入輸出類相關頭文件。
#include<pcl/io/io.h>
#include<pcl/io/pcd_io.h>//pcd 讀寫類相關的頭文件。
#include<pcl/io/ply_io.h>
#include<pcl/point_types.h> //PCL中支持的點類型頭文件。
int user_data;
using namespace std;
int viewerOneOff(pcl::visualization::PCLVisualizer& viewer)
{
viewer.setBackgroundColor(1.0, 0.5, 1.0); //設置背景顏色
return 0;
}
int main()
{
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
char strfilepath[256] = "rabbit.pcd";
pcl::io::loadPCDFile(strfilepath, *cloud);
pcl::visualization::CloudViewer viewer("Cloud Viewer"); //創建viewer對象
viewer.showCloud(cloud);
viewer.runOnVisualizationThreadOnce(viewerOneOff);
system("pause");
return 0;
}
//======================高興========================//