スポンサーリンク
Point Cloud Library (PCL) と言うのを使っているのですが、その中でstlの入出力をしたくなりました。
#include <pcl/io/vtk_lib_io.h>
をしてから
pcl::io::loadPolygonFileSTL ()
を使ってみましたが、リンクエラーでvtkDebugLeaksManagerが見つからないといわれます。
答えを言うとvtkCommonCore-8.0.lib をリンクすればいいのですが、調べてみてもCMakeすればいいよみたいな情報しかなくて結構困りました。
vtkとついているんだからvtkのlibディレクトリを探せばいいことまではわかっています。ある程度目星がついているのに他を探し回るのは嫌だし、だからと言って200個あるlibを一つ一つリンクしてみるのも自分がかわいそうになるので、もう少しましな方法を考えます。
以下のようなBATファイルを作成しました(linksearch.bat)
使い方は、第一引数にライブラリディレクトリのパス、第二引数に検索したいシンボルを指定します。
linksearch "C:\Program Files\PCL 1.8.1\3rdParty\VTK\lib\*" vtkDebugLeaksManager@@QEAA@XZ
この出力結果(flistresult.txt)は、このようになります。
... (以下略)
※行が長くなるので中身を.\libx\に移しています
検索対象のvtkDebugLeaksManagerが表れているなら、その上のlib名で定義されています
本当は、必要なファイルだけを表示するなどしたかったのですが、Windowsのbatがよくわからずに断念しました。
Microsoft COFF Binary File Dumper (DUMPBIN.EXE) は、COFF (Common Object File Format) 形式のバイナリ ファイルに関する情報を出力します。 DUMPBIN を使うと、COFF オブジェクト ファイル、COFF オブジェクトの標準ライブラリ、実行可能ファイル、およびダイナミック リンク ライブラリ (DLL) の内容を確認できます。
ということで、dumpbinはexe,dll,libの内容を確認するためのツールです。
dumpbinはVisual Studioに入っています。Visual Studioのコマンドプロンプト、例えば「VS 2017用 x64 Native Tools コマンドプロンプト」から起動します。
そして、/LINKERMEMBER オプションをつけます。
このオプションは、ライブラリで定義されているパブリック シンボルを出力します。
ただしこれだけだと、必要のない情報も全部出力されてしまいます。テキストエディタの検索機能を使ってもいいのですが、せっかくなのでfindstrへパイプします。
ファイルの中からテキスト文字列を検索する。検索対象のパス指定が無ければ、プロンプトで入力されたテキストまたは別のコマンドからパイプ処理で渡されたテキストを検索する。正規表現の使用ができる。
即ち、目星のついているライブラリに対して、以下のように実行して、標準出力があればよいという事になります。
注意として、findstrに渡すシンボル名は大抵の場合、(C++でコンパイルされているなら)C++の命名規則で渡した方が確実のようです。@@とかついたものです。これはリンクエラーに書いてあるものをそのままコピペすればよいという意味です。
あとはこの内容をbatで適切に変えていけば良いと言うことになります。
Windowsのbatは(本当に)よくわからないので、解説出来ません。