とりあえず日記

VIM→秀丸エディタ→VIM→秀丸エディタ→VIM→秀丸エディタ→VIM→秀丸エディタ→VIM→秀丸エディタ→VIM→秀丸エディタ(いまここ🍄)

MAYA2019 C++プラグインでOpenCVを静的リンクする

前回の続きです

ohtorii.hatenadiary.jp

作業の前に

すでに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)をインストールする

f:id:ohtorii:20190725180405p:plain

 

ビルドが成功したら、opencv-4.1.0/build/install に静的ライブラリ、ヘッダファイル、cmakeファイルなどがあることを確認する。

f:id:ohtorii:20190725180759p:plain



自作プラグインをビルドする

OpenCVを静的リンクして自作プラグインをビルドします。

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()

 

環境

 最後に

 静的リンクを行うとプラグイン(.mll)のファイルサイズが10MB以上になりますが、1ファイルだけ配布すれば良いので運用時のトラブルは減ると思います。