MAYA2019 C++プラグインでOpenCVを静的リンクする
前回の続きです
作業の前に
すでにOpenCVで開発している場合は、念のためOpenCV_DIRを一時的に無効化します。
$ set OpenCV_DIR=
OpenCVの静的リンクのライブラリを作成する
今回利用したソースコード。
https://github.com/opencv/opencv/archive/4.1.0.zip
VisualStudioのソリューションを生成する
$ cmake -DBUILD_SHARED_LIBS=OFF -H. -Bbuild -G "Visual Studio 14 2015 Win64"
省略
-- General configuration for OpenCV 4.1.0 =====================================
-- Version control: unknown
--
-- Platform:
-- Timestamp: 2019-07-25T03:50:55Z
-- Host: Windows 10.0.18362 AMD64
-- CMake: 3.14.5
-- CMake generator: Visual Studio 14 2015 Win64
-- CMake build tool: C:/Program Files (x86)/MSBuild/14.0/bin/MSBuild.exe
-- MSVC: 1900省略
-- C/C++:
-- Built as dynamic libs?: NO省略
-- Built as dynamic libs?: NO となっていることを確認する。
静的ライブラリ(.lib)を生成する
$ cmake --build build --config Release
静的ライブラリ(.lib)をインストールする
ビルドが成功したら、opencv-4.1.0/build/install に静的ライブラリ、ヘッダファイル、cmakeファイルなどがあることを確認する。
自作プラグインをビルドする
CMakeList.txt
cmake_minimum_required(VERSION 2.8)
# include the project setting file
include($ENV{DEVKIT_LOCATION}/cmake/pluginEntry.cmake)# specify project name
set(PROJECT_NAME helloWorld)## Set our project name
# project(${PROJECT_NAME})# set SOURCE_FILES
set(SOURCE_FILES
main.cpp)
# set linking libraries
set(LIBRARIES
OpenMaya
Foundation)
# Build plugin
build_plugin()
#
#静的リンクのライブラリを利用する
#
set( OpenCV_STATIC ON )
find_package( OpenCV REQUIRED )
if(OpenCV_FOUND)#ランタイムライブラリをOpenCVに合わせて変更する。
# Release - マルチスレッド(/MT)
# Debug - マルチスレッドデバッグ(/MTd)
set(CMAKE_CXX_FLAGS_RELEASE "/MT")
set(CMAKE_CXX_FLAGS_DEBUG "/MTd")
target_include_directories(${PROJECT_NAME} PUBLIC ${OpenCV_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})
endif()
環境
- Windows10 64bit
- MAYA 2019
- Visual Studio 2015 Update3
- OpenCV 4.1.0
- CMake 3.14.5
最後に
静的リンクを行うとプラグイン(.mll)のファイルサイズが10MB以上になりますが、1ファイルだけ配布すれば良いので運用時のトラブルは減ると思います。