2015年6月23日火曜日

PCL FLANN include時のwindows7, Visula stuidoでの書き換え必要なエラー(fopen etc...)の解消法

PCLのTriangulationを使いたくて、必要なヘッダファイルをインクルードしたら、それだけでコンパイルが通らない。

原因は、使っている3rd partyソフトウェアのFLANNの中にfopenとかを使っているかららしい。VC++8.0(VisualStudio2005)以降では、セキュリティのために、CRT(Cランタイムライブラリ)のセキュリティ強化版("_s"が付いたやつ)があるからそっち使え、ってことらしい。めんどくさい・・・

その解消のための手順を記します。

1.Program files\PCL 1.7.2\3rdParty\ のアクセス権を変える。
Windows Vista/7/8/8.1では、セキュリティ強化機能として、User Account Control(略称:UAC) がサポートされているので、管理者権限が与えられているユーザーでも、一般ユーザーと同じく、フォルダに対してファイルの書き込み や更新ができません。

と、いくことでファイルを書き換える前にアクセス権を変更する必要があります。

Program files\PCL 1.7.2\3rdParty\ で右クリック プロパティを開く
セキュリティのタブを押す
「Grope or Username」で「User」を選択し、PermissionにFull Controlを与える。

参考:http://www.trycut.com/uac.htm

2.書き換える
それでは、書きかえれるようになったので書き換えていきましょう。

C:\Program Files\PCL 1.7.2\3rdParty\FLANN\include\flann\util\serialization.h
 362行
 変更前:stream_ = fopen(filename, "w");
 変更後:fopen_s(&stream_,filename, "w");
 406行
 変更前:stream_ = fopen(filename, "w");
 変更後:fopen_s(&stream_,filename, "w");
C:\Program Files\PCL 1.7.2\3rdParty\FLANN\include\flann\util\saving.h
 65行
 変更前:strcpy(signature, FLANN_SIGNATURE_);
 変更後:strcpy_s(signature, FLANN_SIGNATURE_);
 67行
 変更前:strcpy(version, FLANN_VERSION_);
 変更後:strcpy_s(signature, FLANN_SIGNATURE_);
C:\Program Files\PCL 1.7.2\3rdParty\FLANN\include\flann\util\logger.h
 66行
 変更前:stream = fopen(name,"w");
 変更後:fopen_s(&stream, name, "w");

PS:多分大丈夫だと思いますが、使用する機能を使ったわけではないので、動作は保障しません。

参考:http://blog.livedoor.jp/mrcom511/archives/51270788.html


0 件のコメント:

コメントを投稿