OpenCV2 で staticlibを作る方法はいろいろ書いてあったけど、OpenCV 3のstatic libを最近の環境で作る方法があまりなかったのでメモ。
OpenCVを静的リンクするためにはstatic libを使う必要があるけど、OpenCV 3.1 以降は公式が配布していないので、自前でビルドする必要がある。
公式のSourceをCMakeでビルドする。この時、BUILD_SHARED_LIBSのチェックをOFFにすれば、dllじゃなくて静的用のstaticlibが生成される。また、BUILD_opencv_worldを有効化して、まとまったlibを生成する。
静的リンクでopencv_worldを生成したら、サイズがとても大きくなるが、Cudaを無効化した状態で実際に生成されたサイズは86MBだったので、最近の富豪的なPCならば問題ないだろう。
ビルドが成功すると、installフォルダができる。
Visual StudioのVC++ディレクトリ設定で、インクルードディレクトリに「install\includes」、ライブラリディレクトリに「install\x64\vc15\staticlib」を、リンカの追加の依存ファイルにopencv_world341d.lib / opencv_world341.lib を指定する。
さて、コレで実行できるかと思ったら、
『LNK2001 外部シンボル ~~~ は未解決です。』エラーが起きる。
試行錯誤した結果、必要な追加の依存ファイルが足りなかった。
「install\x64\vc15\staticlib」に生成されたすべてのlibを登録する必要があった。(opencv_worldの意味…)
というわけで、「IlmImf.lib;ippicvmt.lib;ippiw.lib;ittnotify.lib;libjasper.lib;libjpeg.lib;libpng.lib;libprotobuf.lib;libtiff.lib;libwebp.lib;zlib.lib;opencv_world341.lib;」を追加して、無事、静的リンクができました!