1 下載ios
把與VS版本對應PCL的AllInOne包下載下來。要下對安裝包,須要瞭解安裝包的命名的含義,如下面的一個AllInOne包的名字爲例。安全
PCL-1.8.0-AllInOne-msvc2013-win32.exeoop
其中,1.8.0表示的PCL的版本號,而後2013表示這個安裝包只適用於VS2013中使用,其它VS版本不行,最後win32表示這個安裝包只能用來開發32位的程序。測試
再如下面的安裝包名字爲例。ui
PCL-1.7.2-AllInOne-msvc2012-win64.exethis
這個安裝包是PCL1.7.2版本的,其只能用在VS2012上,而後使用在64位的VS項目開發中。spa
注意必定要下載正確與VS版本以及想要開發的程序位數對應的AllInOne包。.net
下載地址:http://www.zhangzscn.com/,http://unanancyowen.com/debug
2 安裝調試
整個安裝過程須要注意如下三點,其它默認便可:
3 新建
通常在VS裏建立一個C++的控制檯項目,根據本身的意願設置一下項目名和路徑。在新建過程當中注意如下兩點,其它默認便可:
4 配置
在配置項目屬性環節,須要瞭解的是編譯出來的程序分爲兩種32位和64位。不一樣位數的程序須要對應版本的lib和dll才能編譯成功。這裏想要編譯什麼位數的程序,下載對應位數的PCL便可。不一樣位數的程序又分爲:Debug和Release。默認生成的是Debug程序。編譯Debug版本的程序須要Debug版本的lib和dll,編譯Release版本的程序須要Release版本的lib和dll。這些lib和dll在PCL的安裝路徑路徑裏有。若是須要生成上述四種程序,須要分別設置對應的項目屬性表。
根據當前須要編譯的程序位數和傳統的直接在「解決方案資源管理器」裏選中項目右鍵設置項目屬性的方式,不太靈活。這裏以建立屬性表的方式來配置VS。這個根據你當前須要生成的程序,往「屬性管理器」裏項目下對應子項裏添加屬性表,並配置屬性表相關項目,便可成功編譯PCL。
注意:VS默認只生成32位的程序,若是須要生成64的程序,方法以下:VS界面有個運行項,後面有個debug,在後面有個叫「解決方案平臺」的下拉框,其值默認爲win32,須要把win32,改爲x64,方法是,點win32的箭頭,點「配置管理器」,點「活動解決方案平臺」,點「新建」,把「鍵入或選擇新平臺」,這一項,切換爲x64,而後肯定,此時,原來的win32已變爲x64。這時編譯生成的程序就是64位版本的。
添加屬性表的話,找到「屬性管理器」,而後點擊項目的小箭頭,若是是32的程序,會出來如下兩項:Debug|Win32以及Release|Win32,而若是是64位的程序,則會多出兩項:Debug|x64以及Release|x64。選中其中一項,右鍵點擊「添加新項目屬性表」,在彈出的對話框裏設置好對應的屬性表名和路徑。確認以後,在該項中就會多出一項以剛纔屬性表名爲名稱的屬性表。
在新建的屬性表裏,有三個必須設置的重要項目:附加包含目錄,附加庫目錄,附加依賴項。
只有理解裏上面這三項的做用,才能學到如何去解決配置中產生的一些問題。
在配置完屬性表後,還須要配置dll。配置dll有四種方法,第一種,把dll拷貝到system32裏去,第二種,把dll拷貝到編譯出來的程序的文件中,第三種,在系統的path中添加dll的路徑,本文選用第四種方法,直接配置到項目中。具體方法以下:
在「解決方案資源管理器」裏選中項目右鍵點「屬性」,而後選「調試」設置環境的變量值,規則以下:
PATH=;$(PATH)
在等號後添加全部PCL及第三方庫的dll路徑以英文的「;」隔開,最後加上一個$(PATH)便可。例如我設置的以下:
PATH=$(PCL_ROOT)\bin;$(PCL_ROOT)\3rdParty\FLANN\bin;$(PCL_ROOT)\3rdParty\VTK\bin;$(PCL_ROOT)\Qhull\bin;$(PCL_ROOT)\3rdParty\OpenNI2\Tools;$(PATH)
你們根據本身的安裝路徑,靈活變通。
5 開發
完成上述步驟後,就能夠把代碼拷貝到新創建的項目的cpp文件中去,而後編譯,運行。測試一下是否運行成功。測試代碼以下。
#include <pcl/visualization/cloud_viewer.h>
#include <iostream>
#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>
int user_data;
void
viewerOneOff (pcl::visualization::PCLVisualizer& viewer)
{
viewer.setBackgroundColor (1.0, 0.5, 1.0);
pcl::PointXYZ o;
o.x = 1.0;
o.y = 0;
o.z = 0;
viewer.addSphere (o, 0.25, "sphere", 0);
std::cout << "i only run once" << std::endl;
}
void
viewerPsycho (pcl::visualization::PCLVisualizer& viewer)
{
static unsigned count = 0;
std::stringstream ss;
ss << "Once per viewer loop: " << count++;
viewer.removeShape ("text", 0);
viewer.addText (ss.str(), 200, 300, "text", 0);
//FIXME: possible race condition here:
user_data++;
}
int
main ()
{
pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZRGBA>);
pcl::io::loadPCDFile ("my_point_cloud.pcd", *cloud);
pcl::visualization::CloudViewer viewer("Cloud Viewer");
//blocks until the cloud is actually rendered
viewer.showCloud(cloud);
//use the following functions to get access to the underlying more advanced/powerful
//PCLVisualizer
//This will only get called once
viewer.runOnVisualizationThreadOnce (viewerOneOff);
//This will get called once per visualization iteration
viewer.runOnVisualizationThread (viewerPsycho);
while (!viewer.wasStopped ())
{
//you can also do cool processing here
//FIXME: Note that this is running in a separate thread from viewerPsycho
//and you should guard against race conditions yourself...
user_data++;
}
return 0;
}
6 常見問題
配置PCL的過程是比較複雜的,須要根據本身的狀況靈活調整。下面就配置過程當中可能會遇到的典型問題,給出其解決方案。
這個問題是由於在設置include,即設置附加包含目錄,路徑不對或缺乏致使的,根據提示,找到對應錯誤的庫的頭文件路徑,更該便可。
這個問題和上一個問題很像,是附加庫目錄中,路徑不對或缺乏致使的,根據提示,修改對應的路徑便可。
注意:若是設置了,仍是提示找不到頭文件或lib,這時就要查看一下PCL的安裝路徑下有沒有這個頭文件或lib,若是有,說明你的路徑設置的仍是有問題,若是搜索不到這個頭文件,那就要修改代碼,多是版本緣由致使這個頭文件沒了,若是搜索不到lib文件,那麼把這個lib從附加依賴項裏刪除。
這個問題比較難解決,總結起來有四大緣由:
第一個找對安裝包便可,第二個修改項目位數和PCL庫的位數一致便可,第三個要根據經驗去添加上lib文件,第四個的話,在預處理器裏添加PCL_NO_PRECOMPILE便可,固然上面只是經驗之談,要根據實際狀況作出調整。
2.
error C4996: ‘std::_Uninitialized_copy0’: Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ ‘Checked Iterators’ d:\program files\microsoft visual studio 12.0\vc\include\xmemory 348 1 test2
參考:http://blog.csdn.net/lanchunhui/article/details/50900367
右鍵工程名,進入工程屬性頁,依次選中:
編輯【預處理定義】,如錯誤提示所說,添加,_SCL_SECURE_NO_WARNINGS: