Point Cloud Libraryのインストールと設定

KINECT for Windows SDKプログラミングKinect for Windows v2センサー対応版』
の318ページ、7.1.2に書かれている内容を試してみる。
Windows10で。

空のPoint Cloud Viewerを表示するという内容。
数か月前に、ネット情報をもとに、KinectのデータをPoint Cloud Library(PCL)のビューワーで表示するプログラムを動かしたことはあるけど、おさらいとして試してみる。

PCL All in One のインストール

Building Point Cloud Library with Visual Studio 2012/2013/2015 | Summary?Blog

PCL-1.7.2-AllInOne-msvc2013-win64.exe
をダウンロードして実行。

Add PCL to the system PATH for all users
を選んでみた。

インストールフォルダ:
C:\Program Files\PCL 1.7.2

Warning! PATH too long installer unable to modify PATH!

と表示された。

環境変数Pathを消して、インストーラーを実行したら、
C:\Program Files\PCL 1.7.2\bin
というパスが環境変数Pathに追加されていた。
手動で追加したら、普通に追加できた。
なんで、消さないと警告メッセージが出るのかは不明。

とりあえず、
C:\Program Files\PCL 1.7.2
の下にファイルは展開された。

後に出てくるエラーを解消するためには、
C:\Program Files\PCL 1.7.2\3rdParty\VTK\bin
環境変数Pathに追加する。

PCL.props

PCL.props
もunanancyowen.comからダウンロード。

Visual Studioでサンプルプロジェクト

プロジェクトの新規作成で、
Visual C++ > Win32 > Win32 Console Application
を作成。
名前は、
Console_pcl_sample1
にした。
作成時の設定はそのまま。

プロジェクト設定

VIEW > Other Windows > Property Manager
で、Property Managerを開く。
Add Existing Property Sheet
で、
PCL.props
を追加。

Property ManagerのPCLを右クリック、Propertiesをクリック。
Common Properties > User Macros > Add Macro
PCL_ROOT
C:\Program Files\PCL 1.7.2

ソースコードの入力

本に載っているソースコードを入力。

エラーその1

ビルドしたら以下のエラーが出た。

Error    4   error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "stdafx.h"' to your source?   c:\Users\xxxxx\documents\visual studio 2013\Projects\Console_pcl_sample1\Console_pcl_sample1\Console_pcl_sample1.cpp    40  1   Console_pcl_sample1

ソースの最初の方に

#include "stdafx.h"

を書いたら直った。
ちなみに、

#include <stdafx.h>

だとダメだった。

エラーその2
Warning  1   warning C4603: 'NOMINMAX' : macro is not defined or definition is different after precompiled header use    c:\Users\xxxxxx\documents\visual studio 2013\Projects\Console_pcl_sample1\Console_pcl_sample1\Console_pcl_sample1.cpp   13  1   Console_pcl_sample1
Warning 2   warning C4003: not enough actual parameters for macro 'max' C:\Program Files\PCL 1.7.2\include\pcl-1.7\pcl\correspondence.h 75  1   Console_pcl_sample1
Error   3   error C2589: '(' : illegal token on right side of '::'  C:\Program Files\PCL 1.7.2\include\pcl-1.7\pcl\correspondence.h 75  1   Console_pcl_sample1
Error   4   error C2143: syntax error : missing ')' before '::' C:\Program Files\PCL 1.7.2\include\pcl-1.7\pcl\correspondence.h 75  1   Console_pcl_sample1
Error   5   error C2612: trailing '::' illegal in base/member initializer list  C:\Program Files\PCL 1.7.2\include\pcl-1.7\pcl\correspondence.h 75  1   Console_pcl_sample1
Error   6   error C1903: unable to recover from previous error(s); stopping compilation C:\Program Files\PCL 1.7.2\include\pcl-1.7\pcl\pcl_macros.h 66  1   Console_pcl_sample1
#include "stdafx.h"  

より上に

#define NOMINMAX  

があるとこのエラーがでるようだ。
順序を変えたら、、別のエラーになった。

エラーその3
Error    1   error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::system_category(void)" (?system_category@system@boost@@YAABVerror_category@12@XZ) C:\Users\xxxxx\Documents\Visual Studio 2013\Projects\Console_pcl_sample1\Console_pcl_sample1\Console_pcl_sample1.obj    Console_pcl_sample1

c++ - Boost linker error: Unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::get_system_category(void)" - Stack Overflow

32bitと64bitの問題みたい。

Active solution platform:
ダイアログで、
Type or select the new platform:
x64

で解決。ビルド成功した。

========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

エラーその4

実行したら、エラーのダイアログがでた。

コンピューターに pcl_visualization_release.dll がないため、プログラムを開始できません。
この問題を解決するには、プログラムを再インストールしてみてください。
C:\Program Files\PCL 1.7.2\bin;C:\Program Files\PCL 1.7.2\3rdParty\VTK\bin  

環境変数Pathに追加したら動いた。
真っ黒な画面が表示されるだけ。

f:id:kubotti:20151124230300p:plain