Godot GDEXTENSION build 環境構築のまとめ(その5)

Godot

本稿の内容に関して

本稿は GDEXTENSION の開発環境構築を行った際のメモの共有を意図した、一連の記事の5番目。

前稿(その4)では opencv を用いて mp4 動画を Godot エンジンで再生する GDEXTENSION を動作させた。本稿ではコンピュータビジョンで多用される C++ ライブラリを MinGW-w64、x86 64bit アーキテクチャの条件でスタティックリンクライブラリとしてビルドしてゆく。

本稿は GDEXTENSION 開発で使う C++ ライブラリを用意することを意図しているが、本稿にはGDEXTENSION 向けの特別な説明はない。

 C++ ライブラリのビルド

mingw-64を用いた windows 64bitターゲットへのビルド

boost 1.81.0

boost は C++ の準標準 テンプレートライブラリであり様々なライブラリから使用される。多くの機能は ヘッダーファイルをインクルードするだけで利用可能であるが、一部の機能はターゲット環境用にビルドが必要となる。

以下から目的のバージョンを探し c:\devに ダウンロードする。
https://www.boost.org/users/history/

インストールは以下の手順を実行する。

c:\dev>7z x boost_1_81_0.7z
c:\dev>cd boost_1_81_0
C:\dev\boost_1_81_0>.\bootstrap.bat
C:\dev\boost_1_81_0>mkdir C:\dev\tools\mingw64\local\boost_1_81_0
C:\dev\boost_1_81_0>.\b2.exe toolset=gcc --prefix=C:/dev/tools/mingw64/local/boost_1_81_0 install

scons から使用する際に備えて、 “C:\dev\tools\mingw64\local\boost_1_81_0\lib\pkgconfig” というディレクトリを作成し、以下のファイルを設置しておく。

boost.pc

# Package Information for pkg-config

prefix=C:\dev\tools\mingw64\local\boost_1_81_0
libdir=${prefix}/lib
includedir=${prefix}/include/boost-1_81
Name: Boost
Description: Boost Release libraries
Version: 1.81.0
Libs: -L${libdir} -lboost_atomic-mgw13-mt-x64-1_81 -lboost_chrono-mgw13-mt-x64-1_81 -lboost_container-mgw13-mt-x64-1_81 -lboost_context-mgw13-mt-x64-1_81 -lboost_contract-mgw13-mt-x64-1_81 -lboost_coroutine-mgw13-mt-x64-1_81 -lboost_date_time-mgw13-mt-x64-1_81 -lboost_exception-mgw13-mt-x64-1_81 -lboost_fiber-mgw13-mt-x64-1_81 -lboost_filesystem-mgw13-mt-x64-1_81 -lboost_graph-mgw13-mt-x64-1_81 -lboost_iostreams-mgw13-mt-x64-1_81 -lboost_json-mgw13-mt-x64-1_81 -lboost_locale-mgw13-mt-x64-1_81 -lboost_log-mgw13-mt-x64-1_81 -lboost_log_setup-mgw13-mt-x64-1_81 -lboost_math_c99-mgw13-mt-x64-1_81 -lboost_math_c99f-mgw13-mt-x64-1_81 -lboost_math_c99l-mgw13-mt-x64-1_81 -lboost_math_tr1-mgw13-mt-x64-1_81 -lboost_math_tr1f-mgw13-mt-x64-1_81 -lboost_math_tr1l-mgw13-mt-x64-1_81 -lboost_nowide-mgw13-mt-x64-1_81 -lboost_prg_exec_monitor-mgw13-mt-x64-1_81 -lboost_program_options-mgw13-mt-x64-1_81 -lboost_python312-mgw13-mt-x64-1_81 -lboost_random-mgw13-mt-x64-1_81 -lboost_regex-mgw13-mt-x64-1_81 -lboost_serialization-mgw13-mt-x64-1_81 -lboost_stacktrace_noop-mgw13-mt-x64-1_81 -lboost_system-mgw13-mt-x64-1_81 -lboost_test_exec_monitor-mgw13-mt-x64-1_81 -lboost_thread-mgw13-mt-x64-1_81 -lboost_timer-mgw13-mt-x64-1_81 -lboost_type_erasure-mgw13-mt-x64-1_81 -lboost_unit_test_framework-mgw13-mt-x64-1_81 -lboost_url-mgw13-mt-x64-1_81 -lboost_wave-mgw13-mt-x64-1_81 -lboost_wserialization-mgw13-mt-x64-1_81 
Cflags: -I${includedir}

コマンドプロンプトを起動した際のディレクトリに設置する %HOMEPATH%\mingw64.bat に以下の記述を追加しておくと便利。

%HOMEPATH%\mingw64.bat(追加部分)

set PKG_CONFIG_PATH=%PKG_CONFIG_PATH%;C:\dev\tools\mingw64\local\boost_1_81_0\lib\pkgconfig

zlib 1.3

zlibはデータの圧縮伸張を行うためのライブラリであり、様々なライブラリもしくはアプリケーションから利用されている。

配布サイトは以下。
https://zlib.net/

最新のバージョンのソースコードをダウンロードできる。

インストールは以下の手順を実行する。

C:\dev>curl -O https://zlib.net/zlib13.zip
c:\dev>7z x zlib13.zip
C:\dev>del zlib13.zip
C:\dev>cd zlib-1.3
C:\dev\zlib-1.3>mkdir build
C:\dev\zlib-1.3>cd build
C:\dev\zlib-1.3\build>cmake-gui

この状態で上の “Name/Value” 欄で Cmake の Config Key を編集できるようになる。右上にある “Grouped”と “Advanced” の二つのチェックを有効にすると、隠れた Key も表示されるとともに、機能グループに分かれて表示されるので見通しが良くなる。

generate 完了後、以下の Config Key を編集する。

CMAKE_INSTALL_PREFIX -> C:/dev/tools/mingw64/local/zlib-1.3
CMAKE_BUILD_TYPE -> Release
INSTALL_BIN_DIR -> C:/dev/tools/mingw64/local/zlib-1.3/bin
INSTALL_MAN_DIR -> C:/dev/tools/mingw64/local/zlib-1.3/share/man
INSTALL_PKGCONFIG_DIR -> C:/dev/tools/mingw64/local/zlib-1.3/lib/pkgconfig
INSTALL_LIB_DIR -> C:/dev/tools/mingw64/local/zlib-1.3/lib
INSTALL_INC_DIR -> C:/dev/tools/mingw64/local/zlib-1.3/include

設定変更した後は “Generate” ボタンにより確認する。問題無ければ “Configure” ボタンを左クリックし、Configuration を実行する。Makefile はカレントディレクトリに生成されるので、以下のようにビルドを実行する。

C:\dev\zlib-1.3\build>mingw32-make
C:\dev\zlib-1.3\build>mingw32-make install

zlib はライブラリとしての提供であり、単体では使わない。上記の手順では install ディレクトリに Config.cmake ファイルは生成されない。一応、 %HOMEPATH%\mingw64.bat に以下を定義しておくと良いかもしれない。

SET LIB=%LIB%;C:\dev\tools\mingw64\local\zlib-1.3\lib
SET ZLIB_DIR=C:/dev/tools/mingw64/local/zlib-1.3

pkg-config ファイルは以下に格納される。

C:\dev\tools\mingw64\local\zlib-1.3\lib\pkgconfig

コマンドプロンプトを起動した際のディレクトリに設置する %HOMEPATH%\mingw64.bat に以下の記述を追加しておくと便利。

%HOMEPATH%\mingw64.bat(追加部分)

set PKG_CONFIG_PATH=%PKG_CONFIG_PATH%;C:\dev\tools\mingw64\local\zlib-1.3\lib\pkgconfig

lz4 v1.9.4

lz4 は早さを重視したデータの圧縮および伸張を行うためのフリーのライブラリであり、様々なライブラリから利用されている。

配布は以下のGitHub。
https://github.com/lz4/lz4

インストールは以下の手順を実行する。

C:\dev>git clone https://github.com/lz4/lz4  -b v1.9.4 lz4-v1.9.4
C:\dev>cd lz4-v1.9.4
C:\dev\lz4-v1.9.4>cd build
C:\dev\lz4-v1.9.4\build>cd cmake
C:\dev\lz4-v1.9.4\build\cmake>mkdir build
C:\dev\lz4-v1.9.4\build\cmake>cd build
C:\dev\lz4-v1.9.4\build\cmake\build>cmake-gui

cmake-gui で MinGW-w64 用にgenerate を行う。

generate 完了後、以下の Config Key を編集する。

- CMAKE_BUILD_TYPE:STRING=Release
- CMAKE_INSTALL_PREFIX:PATH=C:/dev/tools/mingw64/local/lz4-v1.9.4
- BUILD_SHARED_LIBS:BOOL=0
- BUILD_STATIC_LIBS:BOOL=1

設定変更した後は “Generate” ボタンにより確認する。問題無ければ “Configure” ボタンを左クリックし、Configuration を実行する。Makefile はカレントディレクトリに生成されるので、以下のようにビルドを実行する。

C:\dev\lz4-v1.9.4\build\cmake\build>mingw32-make
C:\dev\lz4-v1.9.4\build\cmake\build>mingw32-make install

lz4 はライブラリとしてだけでなく、lz4.exe 等の実行アプリケーションも提供する。実行アプリケーションを使う場合は以下のように PATH を追加する。

SET PATH=%PATH%;C:\dev\lz4-v1.9.4\build\cmake\build\install\bin
lz4 --help

他のアプリケーションやライブラリに組み込む際は、Cmake 実行前に、以下のように環境変数を設定する。

SET LIB=%LIB%;C:\dev\tools\mingw64\local\lz4-v1.9.4\lib
SET LIBLZ4_DIR=C:/dev/tools/mingw64/local/lz4-v1.9.4

pkg-config ファイルは以下に格納される。

C:\dev\tools\mingw64\local\lz4-v1.9.4\lib\pkgconfig

コマンドプロンプトを起動した際のディレクトリに設置する %HOMEPATH%\mingw64.bat に以下の記述を追加しておくと便利。

%HOMEPATH%\mingw64.bat(追加部分)

set PKG_CONFIG_PATH=%PKG_CONFIG_PATH%;C:\dev\tools\mingw64\local\lz4-v1.9.4\lib\pkgconfig

eigen 3.4.0

eigen は線形代数、行列およびベクトル演算、幾何学的変換などの算術演算テンプレート ヘッダーライブラリであり、様々なライブラリから使用されている。

配布は以下の GitHub。
https://gitlab.com/libeigen/eigen

インストールは以下の手順を実行する。

c:\dev>git clone --depth 1 https://gitlab.com/libeigen/eigen -b 3.4.0 eigen-3.4.0
c:\dev>cd eigen-3.4.0
c:\dev\eigen-3.4.0>mkdir build
c:\dev\eigen-3.4.0>cd build
c:\dev\eigen-3.4.0\build>cmake -G "MinGW Makefiles" ^
 -DCMAKE_INSTALL_PREFIX=C:/dev/tools/mingw64/local/eigen-3.4.0 ^
 -DEIGEN_BUILD_PKGCONFIG=ON ^
 -DEIGEN_CONFIG_DIR=C:/dev/tools/mingw64/local/eigen-3.4.0 ^
 ..
c:\dev\eigen-3.4.0\build>cmake --build . --target install

他のアプリケーションやライブラリに組み込む際は、Cmake 実行前に、以下のように環境変数を設定する。

SET EIGEN_INCLUDE_DIR=C:/dev/tools/mingw64/local/eigen-3.4.0/include

もしくは他のアプリケーションやライブラリは、以下を想定している場合もあるかもしれない。

SET EIGEN_INCLUDE_DIR=C:/dev/tools/mingw64/local/eigen-3.4.0/include/eigen3

これは Eigen の include ファイルの設置ディレクトリが、途中から変わったため、古くからあるプロジェクトのライブラリは include/eigen3/Eigen ではなく、include/Eigen を想定しているため。必要に応じて切り替える必要がある。

pkg-config ファイルは以下に格納される。

C:\dev\tools\mingw64\local\eigen-3.4.0\share\pkgconfig

コマンドプロンプトを起動した際のディレクトリに設置する %HOMEPATH%\mingw64.bat に以下の記述を追加しておくと便利。

%HOMEPATH%\mingw64.bat

set PKG_CONFIG_PATH=%PKG_CONFIG_PATH%;C:\dev\tools\mingw64\local\eigen-3.4.0\share\pkgconfig

FreeGLUT 3.0.0

GLUTとは、OpenGLを比較的簡便に用いることができるユーティリティツールライブラリ。

配布は以下のサイト。
http://freeglut.sourceforge.net/

このサイトからから最新のソースコードのtar.gzパッケージを取得して、c:\dev に格納する。現時点では freeglut-3.4.0.tar.gz が最新。windows11では tar.gz ファイルを取り扱う tar.exe を標準で使用できる。

tar.gzパッケージの取得と解凍は以下のように行う。

c:\dev>curl -L -O https://github.com/FreeGLUTProject/freeglut/releases/download/v3.4.0/freeglut-3.4.0.tar.gz
c:\dev>tar -xzf freeglut-3.4.0.tar.gz

以下の error がでるが、android_toolchain.cmake は現在の所不要なので無視して良い。

x freeglut-3.4.0/progs/test-shapes-gles1/android_toolchain.cmake: Can't create '\\?\c:\dev\freeglut-3.4.0\progs\test-shapes-gles1\android_toolchain.cmake': Invalid argument

インストールは以下の手順を実行する。

c:\dev>del freeglut-3.4.0.tar.gz
c:\dev>cd freeglut-3.4.0
c:\dev\freeglut-3.4.0>mkdir build
c:\dev\freeglut-3.4.0>cd build
c:\dev\freeglut-3.4.0\build>cmake-gui ..

cmake-gui は Cmake に同梱されている GUI ベースの Cmake generator/Configurator。”Generate” のボタンを左クリックすると “Specify the generator for this project” と聞くダイアログが出てくるので以下の設定とする。

  • プルダウンメニュー: MinGW Makefiles
  • ラジオボタン: Use default native compilers

“Finish” ボタンを左クリックすると、generate が始まる。

generate が完了すると下の情報領域に以下のように表示される。

Configuring done
Generating done

cmake-gui で MinGW-w64 用にgenerate を行う。

generate 完了後、以下の Config Key を編集する。

CMAKE_BUILD_TYPE -> Release
CMAKE_INSTALL_PREFIX -> C:/dev/tools/mingw64/local/freeglut-3.4.0
FREEGLUT_BUILD_SHARED_LIBS-> OFF 

設定変更した後は “Generate” ボタンにより確認する。問題無ければ “Configure” ボタンを左クリックし、Configuration を実行する。Makefile はカレントディレクトリに生成されるので、以下のようにビルドを実行する。

c:\dev\freeglut-3.4.0\build>mingw32-make
c:\dev\freeglut-3.4.0\build>mingw32-make install
c:\dev\freeglut-3.4.0\build>copy C:\dev\freeglut-3.4.0\include\GL\glut.h C:\dev\tools\mingw64\local\freeglut-3.4.0\include\GL

glut.h はなぜか “include/GL” ディレクトリに格納されないので手動でコピーする。

FreeGLUT は様々なサンプルを実行アプリケーションとして提供する。これらのサンプルは動作確認として用いることができる。実行アプリケーションを使う場合は以下のように PATH を追加する。

SET PATH=%PATH%;C:\dev\freeglut-3.4.0\build\bin
One_static.exe

全画面表示でヤカンが回転するデモサンプルが起動する。全画面表示はキーボードの “ESC” キーを押すことで解除できる。

他のアプリケーションやライブラリに組み込む際は、Cmake 実行前に、以下のように環境変数を設定する。

SET GLUT_DIR=C:\dev\tools\mingw64\local\freeglut-3.4.0

pkg-config ファイルは以下に格納される。

C:\dev\tools\mingw64\local\freeglut-3.4.0\lib\pkgconfig

コマンドプロンプトを起動した際のディレクトリに設置する %HOMEPATH%\mingw64.bat に以下の記述を追加しておくと便利。

%HOMEPATH%\mingw64.bat(追加部分)

set PKG_CONFIG_PATH=%PKG_CONFIG_PATH%;C:\dev\tools\mingw64\local\freeglut-3.4.0\lib\pkgconfig

glew 2.1.0

glew は OpenGL 拡張を使えるようにするライブラリ。

配布は以下のサイト。
http://glew.sourceforge.net/

このサイトからから最新のソースコードの ZIP パッケージを取得して、c:\dev に格納する。現時点では glew-2.1.0.zip が最新。

ZIP パッケージの取得とインストールは以下の手順を実行する。

c:\dev>curl -L -o glew-2.1.0.zip https://sourceforge.net/projects/glew/files/glew/2.1.0/glew-2.1.0.zip/download
c:\dev>7z x glew-2.1.0.zip
c:\dev>del glew-2.1.0.zip
c:\dev>cd glew-2.1.0
c:\dev\glew-2.1.0>cd build\cmake
c:\dev\glew-2.1.0\build\cmake>mkdir build
c:\dev\glew-2.1.0\build\cmake>cd build
c:\dev\glew-2.1.0\build\cmake\build>cmake-gui ..

cmake-gui で MinGW-w64 用にgenerate を行う。

generate 完了後、以下の Config Key を編集する。

- CMAKE_INSTALL_PREFIX -> C:/dev/tools/mingw64/local/glew-2.1.0"
- CMAKE_BUILD_TYPE -> Release

設定変更した後は “Generate” ボタンにより確認する。

問題無ければ “Configure” ボタンを左クリックし、Configuration を実行する。Makefile はカレントディレクトリに生成されるので、以下のようにビルドを実行する。

c:\dev\glew-2.1.0\build\cmake\build>mingw32-make
c:\dev\glew-2.1.0\build\cmake\build>mingw32-make install

他のアプリケーションやライブラリに組み込む際は、Cmake 実行前に、以下のように環境変数を設定する。

SET LIB=%LIB%;C:\dev\tools\mingw64\local\glew-2.1.0\lib
SET GLEW_DIR=C:\dev\tools\mingw64\local\glew-2.1.0

pkg-config ファイルは以下に格納される。

C:\dev\tools\mingw64\local\glew-2.1.0\lib\pkgconfig

コマンドプロンプトを起動した際のディレクトリに設置する %HOMEPATH%\mingw64.bat に以下の記述を追加しておくと便利。

%HOMEPATH%\mingw64.bat(追加部分)

set PKG_CONFIG_PATH=%PKG_CONFIG_PATH%;C:\dev\tools\mingw64\local\glew-2.1.0\lib\pkgconfig

Qt 6.6.1

Qtは、クロスプラットフォームアプリケーション開発フレームワークで、同じコードベースで異なるプラットフォーム向けアプリケーションを実現させることができる。

Qt は GUI インターフェースを提供するという意味で、GODOT エンジンとはある意味競合の関係にある。GDEXTENSION に Qt のライブラリをリンクするケースは考えにくい。

とはいうものの、pcl や vtk といったライブラリの可視化は Qt に依存していることもあり、GODOT GDEXTENSION に組み込む前のテストなどを考えるとインストールしてあった方が都合が良い。

Qt のインストールディレクトリは、リリースもとの想定する位置から変えると様々な問題が出てくる。GDEXTENSION にリンクすることもないので、ベンダーが提供する方法/ディレクトリ構成でインストールを行う。

配布サイトは以下。
https://www.qt.io/download-open-source

インストール方法は特に説明しない。

hdf5 1.10.5

hdf5 は階層データーを取り扱うためのライブラリで、以下のサイトで配布されている。
https://support.hdfgroup.org/ftp/HDF5/

hdf5 は mingw での build はサポートされていない。従って、mingw を用いたビルドは大変困難。ここでは無理やり build を試みている。

hdf5 は zlib、szip のサポートを有効とすることが通常であるが、ここでは zlibだけを有効とし、テストも行わない。

以下のページから最新のソースコードをダウンロードする。
https://support.hdfgroup.org/ftp/HDF5/current/src/

curl -O https://support.hdfgroup.org/ftp/HDF5/current/src/CMake-hdf5-1.10.5.zip
7z x CMake-hdf5-1.10.5.zip
del CMake-hdf5-1.10.5.zip
cd CMake-hdf5-1.10.5
cd hdf5-1.10.5
mkdir build
cd build
cmake-gui .. 

cmake-gui で MinGW-w64 用にgenerate を行う。

generate 完了後、以下の Config Key を編集する。

- CMAKE_CXX_FLAGS -> -D__FUNCTION__=__func__
- CMAKE_C_FLAGS -> -D__FUNCTION__=__func__
- CMAKE_INSTALL_PREFIX -> C:/dev/tools/mingw64/local/hdf5-1.10.5
- CMAKE_BUILD_TYPE -> Release
- BUILD_SHARED_LIBS -> OFF
- ZLIB_DIR -> C:/dev/tools/mingw64/local/zlib-1.3
- ZLIB_INCLUDE_DIR -> C:/dev/tools/mingw64/local/zlib-1.3/include
- ZLIB_LIBRARY_RELEASE -> C:/dev/tools/mingw64/local/zlib-1.3/lib/libzlibstatic.a
- ZLIB_LIBRARY_DEBUG -> C:/dev/tools/mingw64/local/zlib-1.3/lib/libzlibstatic.a
- HDF5_ENABLE_Z_LIB_SUPPORT -> ON

設定変更した後は “Generate” ボタンにより確認する。

問題無ければ “Configure” ボタンを左クリックし、Configuration を実行する。Makefile はカレントディレクトリに生成されるが、このままではコンパイルエラーが発生するのでソースコードを修正する。

具体的には、以下のファイルに記述を追加/修正を行う。

.\CMake-hdf5-1.10.5\hdf5-1.10.5\src\H5win32defs.h(修正差分)

+ #ifdef __MINGW32__
+ #define HDopen(S,F,...)       _open(S, F | _O_BINARY, ##__VA_ARGS__)
+ #else
  #define HDopen(S,F,...)       _open(S, F | _O_BINARY, __VA_ARGS__)
+ #endif

ソースコード修正の後、以下のようにビルドを実行する。

mingw32-make
mingw32-make install

他のアプリケーションやライブラリに組み込む際は、Cmake 実行前に、以下のように環境変数を設定する。

SET LIB=%LIB%;C:\dev\tools\mingw64\local\hdf5-1.10.5\lib
SET HDF5_DIR=C:\dev\tools\mingw64\local\hdf5-1.10.5

pkg-config ファイルは以下に格納される。

C:\dev\tools\mingw64\local\hdf5-1.10.5\lib\pkgconfig

コマンドプロンプトを起動した際のディレクトリに設置する %HOMEPATH%\mingw64.bat に以下の記述を追加しておくと便利。

%HOMEPATH%\mingw64.bat(追加部分)

set PKG_CONFIG_PATH=%PKG_CONFIG_PATH%;C:\dev\tools\mingw64\local\hdf5-1.10.5\lib\pkgconfig

flann 1.9.1

flann は最近傍点探索ライブラリで、点群処理などに用いられる。

配布サイトは以下の GitHub。
https://github.com/mariusmuja/flann

インストールは以下の手順を実行する。

git clone --depth 1 https://github.com/mariusmuja/flann -b 1.9.1 flann-1.9.1
cd flann-1.9.1
mkdir build
cd build
cmake-gui ..

cmake-gui で MinGW-w64 用にgenerate を行う。

generate 完了後、以下の Config Key を編集する。

- CMAKE_INSTALL_PREFIX -> C:/dev/tools/mingw64/local/flann-1.9.1
- CMAKE_BUILD_TYPE -> Release
- BUILD_EXAMPLES -> OFF
- BUILD_MATLAB_BINDINGS -> OFF
- BUILD_PYTHON_BINDINGS -> OFF
- BUILD_TESTS -> OFF

設定変更した後は “Generate” ボタンにより確認する。

問題無ければ “Configure” ボタンを左クリックし、Configuration を実行する。Makefile はカレントディレクトリに生成されるので、以下のようにビルドを実行する。

mingw32-make
mingw32-make install

他のアプリケーションやライブラリに組み込む際は、Cmake 実行前に、以下のように環境変数を設定する。

SET LIB=%LIB%;C:\dev\tools\mingw64\local\flann-1.9.1\lib

Config.cmake はインストールされない。

pkg-config ファイルは以下に格納される。

C:\dev\tools\mingw64\local\flann-1.9.1\lib\pkgconfig

このディレクトリ配下に、flann.pc が格納されているが、記述のライブラリ名と実際のライブラリ名に齟齬があるため、スタティックリンク時にはエラーが発生する。対策として flann.pc を以下のように修正する。

flann.pc(修正差分)

  Requires: 
- Libs: -L${libdir} -lflann -lflann_cpp
+ Libs: -L${libdir} -lflann_s -lflann_cpp_s
  Cflags: -I${includedir}

コマンドプロンプトを起動した際のディレクトリに設置する %HOMEPATH%\mingw64.bat に以下の記述を追加しておくと便利。

%HOMEPATH%\mingw64.bat(追加部分)

set PKG_CONFIG_PATH=%PKG_CONFIG_PATH%;C:\dev\tools\mingw64\local\flann-1.9.1\lib\pkgconfig

vtk 9.2.6

vtkは、3Dコンピュータグラフィックス /画像処理/可視化のためのライブラリ集。

オプションとして vtk は可視化のために Qt を使うこともできる。

vtk での MinGW-w64 対応は “Best effort” であり、しっかりとした試験が行われているわけではない。
https://discourse.vtk.org/t/building-libvtk-with-mingw64-or-bcc64/7744

従って、MinGW-w64 を用いたビルドには困難が伴う場合がある。ここでは最小構成でのビルドを試みる。

配布サイトは以下の GitHub。
https://gitlab.kitware.com/vtk/vtk.git

インストールは以下の手順を実行する。

git clone --depth 1 https://gitlab.kitware.com/vtk/vtk.git -b v9.2.6 vtk-v9.2.6
cd vtk-v9.2.6
mkdir build
cd build
cmake-gui ..

cmake-gui で MinGW-w64 用にgenerate を行う。

generate 完了後、以下の Config Key を編集する。

- BUILD_SHARED_LIBS -> 0
- CMAKE_CXX_FLAGS ->  -std=c++17 -fcommon
- CMAKE_CXX_STANDARD_LIBRARIES -> -mwin32 -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32
- CMAKE_C_FLAGS ->  -fcommon
- CMAKE_C_STANDARD_LIBRARIES -> -mwin32 -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32
- CMAKE_INSTALL_PREFIX ->  C:/dev/tools/mingw64/local/vtk-v9.2.6
- CMAKE_BUILD_TYPE -> Release
- GIT_EXECUTABLE -> C:/Program Files/Git/cmd/git.exe
- VTK_MODULE_ENABLE_VTK_GUISupportQtQuick -> NO
- VTK_MODULE_ENABLE_VTK_ViewsQt -> NO
- VTK_MODULE_ENABLE_VTK_GUISupportQt -> NO
- VTK_MODULE_ENABLE_VTK_RenderingQt -> NO
- VTK_GROUP_ENABLE_Qt -> NO
- VTK_MODULE_ENABLE_VTK_GUISupportQtSQL -> NO

設定変更した後は “Generate” ボタンにより確認する。

問題無ければ “Configure” ボタンを左クリックし、Configuration を実行する。

Makefile はカレントディレクトリに生成されるが、このままではコンパイルエラーが発生するのでソースコードを修正する。具体的には、以下のファイルに記述を追加/修正を行う。

.\vtk-v9.2.6\IO\Image\vtkSEPReader.h(修正差分)

  #include <array>  // for std::array
  #include <string> // for std::string
+ #ifdef __STRICT_ANSI__  // add- kuyo
+ #include <cstdint>
+ #endif                  // -add kuyo

.\vtk-v9.2.6\ThirdParty\libproj\vtklibproj\src\proj_json_streaming_writer.hpp(修正差分)

  #include <vector>
  #include <string>
+ #ifdef __STRICT_ANSI__  // add- kuyo
+ #include <cstdint>
+ #endif                  // -add kuyo

.\vtk-v9.2.6\ThirdParty\libproj\vtklibproj\include\proj\util.hpp(修正差分)

  // Prevent interference with enum in this file.
- #ifdef _MSC_VER
+ #if defined(_MSC_VER) || defined(__MINGW32__) // mod kuyo
  #undef STRICT
  #endif

ソースコード修正の後、以下のようにビルドを実行する。

mingw32-make
mingw32-make install

他のアプリケーションやライブラリに組み込む際は、Cmake 実行前に、以下のように環境変数を設定する。

SET LIB=%LIB%;C:\dev\tools\mingw64\local\vtk-v9.2.6\lib
SET VTK_DIR=C:\dev\tools\mingw64\local\vtk-v9.2.6

Cmake を用いて、vtk ライブラリを用いたアプリケーションのビルドを行うことは比較的簡単。しかし非常に困ったことに、vtk は 100 以上のスタティックリンクライブラリを生成するにもかかわらず、pkg-config ファイル (vtk.pc) を生成しない。このことは、vtk ライブラリを用いたアプリケーションにおいて、scons でのビルドが困難であることを意味する。

仕方が無いので、自前で vtk.pc を作成する。”C:\dev\tools\mingw64\local\vtk-v9.2.6\lib\pkgconfig” のディレクトリを作成し以下のファイルを設置する。

vtk.pc

# Package Information for pkg-config
prefix=C:\dev\tools\mingw64\local\vtk-v9.2.6
libdir=${prefix}/lib
includedir=${prefix}/include/vtk-9.2
Name: vtk
Description: VTK
Version: 9.2.6
Libs: -L${libdir} -lvtkRenderingLOD-9.2 -lvtkFiltersModeling-9.2 -lvtkIOImage-9.2 -lvtkRenderingOpenGL2-9.2 -lvtkInteractionWidgets-9.2 -lvtkIOPLY-9.2 -lvtkRenderingAnnotation-9.2 -lvtkRenderingFreeType-9.2 -lvtkRenderingHyperTreeGrid-9.2 -lvtktiff-9.2 -lvtkInteractionStyle-9.2 -lvtkRenderingUI-9.2 -lvtkFiltersHyperTree-9.2 -lvtkRenderingCore-9.2 -lvtkFiltersGeneral-9.2 -lvtkFiltersGeometry-9.2 -lvtkCommonExecutionModel-9.2 -lvtkFiltersExtraction-9.2 -lvtkFiltersCore-9.2 -lvtkCommonDataModel-9.2 -lvtkCommonCore-9.2 -lvtksys-9.2 -lvtkcgns-9.2 -lvtkChartsCore-9.2 -lvtkCommonColor-9.2 -lvtkCommonComputationalGeometry-9.2 -lvtkCommonMisc-9.2 -lvtkCommonSystem-9.2 -lvtkCommonTransforms-9.2 -lvtkDICOMParser-9.2 -lvtkDomainsChemistry-9.2 -lvtkDomainsChemistryOpenGL2-9.2 -lvtkdoubleconversion-9.2 -lvtkexodusII-9.2 -lvtkexpat-9.2 -lvtkFiltersAMR-9.2 -lvtkFiltersFlowPaths-9.2 -lvtkFiltersGeneric-9.2 -lvtkFiltersHybrid-9.2 -lvtkFiltersImaging-9.2 -lvtkFiltersParallel-9.2 -lvtkFiltersParallelImaging-9.2 -lvtkFiltersPoints-9.2 -lvtkFiltersProgrammable-9.2 -lvtkFiltersSelection-9.2 -lvtkFiltersSMP-9.2 -lvtkFiltersSources-9.2 -lvtkFiltersStatistics-9.2 -lvtkFiltersTexture-9.2 -lvtkFiltersTopology-9.2 -lvtkFiltersVerdict-9.2 -lvtkfmt-9.2 -lvtkfreetype-9.2 -lvtkGeovisCore-9.2 -lvtkgl2ps-9.2 -lvtkglew-9.2 -lvtkGUISupportQt-9.2 -lvtkGUISupportQtQuick-9.2 -lvtkGUISupportQtSQL-9.2 -lvtkhdf5-9.2 -lvtkhdf5_hl-9.2 -lvtkImagingColor-9.2 -lvtkImagingCore-9.2 -lvtkImagingFourier-9.2 -lvtkImagingGeneral-9.2 -lvtkImagingHybrid-9.2 -lvtkImagingMath-9.2 -lvtkImagingMorphological-9.2 -lvtkImagingSources-9.2 -lvtkImagingStatistics-9.2 -lvtkImagingStencil-9.2 -lvtkInfovisCore-9.2 -lvtkInfovisLayout-9.2 -lvtkInteractionImage-9.2 -lvtkIOAMR-9.2 -lvtkIOAsynchronous-9.2 -lvtkIOCesium3DTiles-9.2 -lvtkIOCGNSReader-9.2 -lvtkIOChemistry-9.2 -lvtkIOCityGML-9.2 -lvtkIOCONVERGECFD-9.2 -lvtkIOCore-9.2 -lvtkIOEnSight-9.2 -lvtkIOExodus-9.2 -lvtkIOExport-9.2 -lvtkIOExportGL2PS-9.2 -lvtkIOExportPDF-9.2 -lvtkIOGeometry-9.2 -lvtkIOHDF-9.2 -lvtkIOImport-9.2 -lvtkIOInfovis-9.2 -lvtkIOIOSS-9.2 -lvtkIOLegacy-9.2 -lvtkIOLSDyna-9.2 -lvtkIOMINC-9.2 -lvtkIOMotionFX-9.2 -lvtkIOMovie-9.2 -lvtkIONetCDF-9.2 -lvtkIOOggTheora-9.2 -lvtkIOParallel-9.2 -lvtkIOParallelXML-9.2 -lvtkIOSegY-9.2 -lvtkIOSQL-9.2 -lvtkioss-9.2 -lvtkIOTecplotTable-9.2 -lvtkIOVeraOut-9.2 -lvtkIOVideo-9.2 -lvtkIOXML-9.2 -lvtkIOXMLParser-9.2 -lvtkjpeg-9.2 -lvtkjsoncpp-9.2 -lvtkkissfft-9.2 -lvtklibharu-9.2 -lvtklibproj-9.2 -lvtklibxml2-9.2 -lvtkloguru-9.2 -lvtklz4-9.2 -lvtklzma-9.2 -lvtkmetaio-9.2 -lvtknetcdf-9.2 -lvtkogg-9.2 -lvtkParallelCore-9.2 -lvtkParallelDIY-9.2 -lvtkpng-9.2 -lvtkpugixml-9.2 -lvtkRenderingContext2D-9.2 -lvtkRenderingContextOpenGL2-9.2 -lvtkRenderingGL2PSOpenGL2-9.2 -lvtkRenderingImage-9.2 -lvtkRenderingLabel-9.2 -lvtkRenderingLICOpenGL2-9.2 -lvtkRenderingQt-9.2 -lvtkRenderingSceneGraph-9.2 -lvtkRenderingVolume-9.2 -lvtkRenderingVolumeOpenGL2-9.2 -lvtkRenderingVtkJS-9.2 -lvtksqlite-9.2 -lvtkTestingRendering-9.2 -lvtktheora-9.2 -lvtkverdict-9.2 -lvtkViewsContext2D-9.2 -lvtkViewsCore-9.2 -lvtkViewsInfovis-9.2 -lvtkViewsQt-9.2 -lvtkWrappingTools-9.2 -lvtkzlib-9.2 -lvtkCommonMath-9.2
Libs.private: -lpsapi -lwsock32 -lopengl32 -lglu32

Cflags: -I${includedir}

この pkg-config ファイルは努力して作成したものではあるが、ライブラリの順番が正しいか否かは保証しない。また、バージョンが変われば、ライブラリの順番にも影響があると思われる。都度、検証しつつ改造して使うことを推奨する。

なお、コマンドプロンプトを起動した際のディレクトリに設置する %HOMEPATH%\mingw64.bat に以下の記述を追加しておくと便利。

%HOMEPATH%\mingw64.bat(追加部分)

set PKG_CONFIG_PATH=%PKG_CONFIG_PATH%;C:\dev\tools\mingw64\local\vtk-v9.2.6\lib\pkgconfig

以上見てきたように、vtk を MinGW-w64 で スタティックリンクライブラリとしてビルドし、それを scons で利用しようとした場合、一筋縄ではいかないことが分かって頂けたと思う。

vtk は 単体でも非常に有用なライブラリであるが、ここまでしてビルドしたい理由は pcl が必須とするから。できるだけ小さな構成でのビルドを指向し、一度動作する vtk ライブラリが用意できたならば、それを長く使っていくことが肝要ではなかろうか。

qhull v8.0.2

qhull は凹凸に関する幾何学ライブラリであり、点群処理などで利用される。

配布サイトは以下の GitHub。
https://github.com/qhull/qhull

インストールは以下の手順を実行する。

git clone --depth 1 https://github.com/qhull/qhull -b v8.0.2 qhull-v8.0.2
cd qhull-v8.0.2
mkdir build_mingw64
cd build_mingw64
cmake-gui ..

cmake-gui で MinGW-w64 用にgenerate を行う。

generate 完了後、以下の Config Key を編集する。

- CMAKE_INSTALL_PREFIX -> C:/dev/tools/mingw64/local/qhull-v8.0.2
- CMAKE_BUILD_TYPE-> Release
- BUILD_SHARED_LIBS -> OFF
- WITH_LFS -> OFF

設定変更した後は “Generate” ボタンにより確認する。

問題無ければ “Configure” ボタンを左クリックし、Configuration を実行する。Makefile はカレントディレクトリに生成されるので、以下のようにビルドを実行する。

mingw32-make
mingw32-make install

他のアプリケーションやライブラリに組み込む際は、Cmake 実行前に、以下のように環境変数を設定する。

SET LIB=%LIB%;C:\dev\tools\mingw64\local\qhull-v8.0.2\lib
SET QHULL_DIR=C:\dev\tools\mingw64\local\qhull-v8.0.2

pkg-config ファイルは以下に格納される。

C:\dev\tools\mingw64\local\qhull-v8.0.2\lib\pkgconfig

コマンドプロンプトを起動した際のディレクトリに設置する %HOMEPATH%\mingw64.bat に以下の記述を追加しておくと便利。

%HOMEPATH%\mingw64.bat(追加部分)

set PKG_CONFIG_PATH=%PKG_CONFIG_PATH%;C:\dev\tools\mingw64\local\qhull-v8.0.2\lib\pkgconfig

bullet 3.25

bullet は物理演算エンジンライブラリ。

配布サイトは以下の GitHub。
https://github.com/bulletphysics/bullet3.git

インストールは以下の手順を実行する。

git clone --depth 1 https://github.com/bulletphysics/bullet3.git  -b 3.25 bullet-3.25
cd bullet-3.25
mkdir build
cd build
cmake-gui ..

cmake-gui で MinGW-w64 用にgenerate を行う。

generate 完了後、以下の Config Key を編集する。

- CMAKE_INSTALL_PREFIX -> C:/dev/tools/mingw64/local/bullet-3.25
- CMAKE_BUILD_TYPE -> Release
- CMAKE_CXX_FLAGS -> -std=c++11
- CMAKE_CXX_STANDARD_LIBRARIES -> -lopengl32  -lwinmm -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32
- BUILD_BULLET2_DEMOS -> ON
- BUILD_CPU_DEMOS -> ON
- BUILD_OPENGL3_DEMOS -> ON
- BUILD_UNIT_TESTS -> OFF
- LIBRARY_OUTPUT_PATH -> lib
- PKGCONFIG_INSTALL_PREFIX -> lib/pkgconfig
- INSTALL_LIBS -> ON
- EXECUTABLE_OUTPUT_PATH -> C:/dev/tools/mingw64/local/bullet-3.25/bin
- USE_MSVC_INCREMENTAL_LINKING -> OFF
- USE_MSVC_RELEASE_RUNTIME_ALWAYS -> OFF
- USE_MSVC_RUNTIME_LIBRARY_DLL -> OFF

設定変更した後は “Generate” ボタンにより確認する。

問題無ければ “Configure” ボタンを左クリックし、Configuration を実行する。Makefile はカレントディレクトリに生成される。

このままではいくつかコンパイルエラーが発生するので以下のファイルを編集する。

.\bullet-3.25\examples\SharedMemory\plugins\stablePDPlugin\MathUtil.cpp(修正差分)

  #define _USE_MATH_DEFINES
  #include <math.h>
+ #ifndef M_PI
+ #define M_PI 3.14159265358979323846
+ #endif

.\bullet-3.25\examples\SharedMemory\plugins\stablePDPlugin\RBDUtil.cpp(修正差分)

  #define _USE_MATH_DEFINES
  #include "math.h"
+ #ifndef M_PI
+ #define M_PI 3.14159265358979323846
+ #endif

編集後、以下のようにビルドを実行する。

mingw32-make
mingw32-make install

他のアプリケーションやライブラリに組み込む際は、Cmake 実行前に、以下のように環境変数を設定する。

SET LIB=%LIB%;C:\dev\tools\mingw64\local\bullet-3.25\lib
SET BULLET_DIR=C:\dev\tools\mingw64\local\bullet-3.25

pkg-config ファイルは以下に格納される。

C:\dev\tools\mingw64\local\bullet-3.25\lib\pkgconfig

コマンドプロンプトを起動した際のディレクトリに設置する %HOMEPATH%\mingw64.bat に以下の記述を追加しておくと便利。

%HOMEPATH%\mingw64.bat(追加部分)

set PKG_CONFIG_PATH=%PKG_CONFIG_PATH%;C:\dev\tools\mingw64\local\bullet-3.25\lib\pkgconfig

上記ではデモ実行ファイルをビルドした。実行ファイルは以下のディレクトリに格納される。

C:\dev\tools\mingw64\local\bullet-3.25\bin

Windows エクスプローラー で実行できるように、実行ファイル格納ディレクトリに libstdc++-6.dll をコピーしておく。

copy C:\dev\tools\mingw64\bin\libstdc++-6.dll C:\dev\tools\mingw64\local\bullet-3.25\bin

App_ExampleBrowser.exe では色々なサンプルを試せる。

幾つかのサンプルは実行するとクラッシュし、以後再起動できなくなってしまうようだ。その場合、同じディレクトリに生成される “0_Bullet3Demo.txt” を削除すると再起動できるようになる。

pcl 1.13.1

pcl は点群を取り扱うためのライブラリ。

配布サイトは以下の GitHub。
https://github.com/PointCloudLibrary/pcl.git

インストールは以下の手順でできる。依存するライブラリが非常に多く、Cmake のコンフィグもややこしいが、他のライブラリがインストールされていれば pcl そのもののビルドは比較的素直。

SET PATH=%PATH%;C:\Qt\6.6.1\mingw_64\bin
SET Qt6_DIR=C:/Qt/6.6.1
SET CMAKE_INSTALL_PREFIX=C:/dev/tools/mingw64/local/pcl-1.13.1
SET Boost_DIR=C:/dev/tools/mingw64/local/boost_1_81_0
SET Boost_FILESYSTEM_LIBRARY_RELEASE=C:/dev/tools/mingw64/local/boost_1_81_0/stage/lib/libboost_filesystem-mgw13-mt-x64-1_81.a
SET Boost_IOSTREAMS_LIBRARY_RELEASE=C:/dev/tools/mingw64/local/boost_1_81_0/stage/lib/libboost_iostreams-mgw13-mt-x64-1_81.a
SET Boost_REGEX_LIBRARY_RELEASE=C:/dev/tools/mingw64/local/boost_1_81_0/stage/lib/libboost_regex-mgw13-mt-x64-1_81.a
SET Boost_SERIALIZATION_LIBRARY_RELEASE=C:/dev/tools/mingw64/local/boost_1_81_0/stage/lib/libboost_serialization-mgw13-mt-x64-1_81.a
SET Boost_SYSTEM_LIBRARY_RELEASE=C:/dev/tools/mingw64/local/boost_1_81_0/stage/lib/libboost_system-mgw13-mt-x64-1_81.a
SET EIGEN_INCLUDE_DIR=C:/dev/tools/mingw64/local/eigen-3.4.0/include/eigen3
SET flann_DIR=C:/dev/tools/mingw64/local/flann-1.9.1/cmake
SET FLANN_LIBRARY_STATIC=C:/dev/tools/mingw64/local/flann-1.9.1/lib/libflann_s.a
SET FLANN_INCLUDE_DIR=C:/dev/tools/mingw64/local/flann-1.9.1/include
SET PKG_CONFIG_EXECUTABLE=C:/dev/tools/pkg-config/bin/pkg-config.exe
SET ZLIB_INCLUDE_DIR=C:/dev/tools/mingw64/local/zlib-1.3/include
SET ZLIB_LIBRARY_RELEASE=C:/dev/tools/mingw64/local/zlib-1.3/lib/libzlibstatic.a
SET flann_DIR=C:/dev/flann-1.9.1/build/install 
SET FLANN_INCLUDE_DIR=C:/dev/flann-1.9.1/build/install/include
SET FLANN_LIBRARY_STATIC=C:/dev/flann-1.9.1/build/install/lib/libflann_s.a
SET Qhull_DIR=C:/dev/qhull-v8.0.2/build/install
SET QHULL_LIBRARY_STATIC=C:/dev/qhull-v8.0.2/build/install/lib/libqhullstatic.a
SET VTK_DIR=C:/dev/vtk-v9.2.6/build
SET ZLIB_INCLUDE_DIR=C:/dev/zlib-1.3/build/install/include
SET ZLIB_LIBRARY_RELEASE=C:/dev/zlib-1.3/build/install/lib/libzlibstatic.a
git clone --depth 1 https://github.com/PointCloudLibrary/pcl.git -b pcl-1.13.1 pcl-1.13.1
cd pcl-1.13.1
mkdir build
cd build
cmake-gui ..

cmake-gui で MinGW-w64 用にgenerate を行う。

generate 完了後、以下の Config Key を編集する。

- BUILD_examples -> ON
- BUILD_apps -> ON
- BUILD_simulation -> ON

- ClangFormat_EXECUTABLE -> C:/Program Files/LLVM/bin/clang-format.exe
- CMAKE_BUILD_TYPE -> Release
- CMAKE_CONFIGURATION_TYPES -> Release
- CMAKE_INSTALL_PREFIX -> C:\dev\tools\mingw64\local\pcl-1.13.1

- Boost_DIR - > C:/dev/tools/mingw64/local/boost_1_81_0/lib/cmake/Boost-1.81.0
- Boost_INCLUDE_DIR -> C:/dev/tools/mingw64/local/boost_1_81_0/include/boost-1_81
- Boost_FILESYSTEM_LIBRARY_RELEASE -> C:/dev/tools/mingw64/local/boost_1_81_0/lib/libboost_filesystem-mgw13-mt-x64-1_81.a
- Boost_IOSTREAMS_LIBRARY_RELEASE -> C:/dev/tools/mingw64/local/boost_1_81_0/lib/libboost_iostreams-mgw13-mt-x64-1_81.a
- Boost_SERIALIZATION_LIBRARY_RELEASE -> C:/dev/tools/mingw64/local/boost_1_81_0/lib/libboost_serialization-mgw13-mt-x64-1_81.a
- Boost_SYSTEM_LIBRARY_RELEASE -> C:/dev/tools/mingw64/local/boost_1_81_0/lib/libboost_system-mgw13-mt-x64-1_81.a

- EIGEN_INCLUDE_DIR -> C:/dev/tools/mingw64/local/eigen-3.4.0/include/eigen3
- flann_DIR -> C:/dev/flann-1.9.1/cmake
- FLANN_LIBRARY_STATIC -> C:/dev/tools/mingw64/local/flann-1.9.1/lib/libflann_s.a
- FLANN_INCLUDE_DIR -> C:/dev/tools/mingw64/local/flann-1.9.1/include
- PCL_SHARED_LIBS -> OFF
- PCL_QHULL_REQUIRED_TYPE -> STATIC
- PKG_CONFIG_EXECUTABLE -> C:/dev/tools/pkg-config/bin/pkg-config.exe

- Qhull_DIR -> C:/dev/tools/mingw64/local/qhull-v8.0.2/lib/cmake/Qhull
- QHULL_LIBRARY_STATIC -> C:/dev/tools/mingw64/local/qhull-v8.0.2/lib/libqhullstatic.a

- Qt6_DIR -> C:/Qt/6.6.1
- Qt6Concurrent_DIR -> C:/Qt/6.6.1/mingw_64/lib/cmake/Qt6Concurrent
- Qt6Core_DIR -> C:/Qt/6.6.1/mingw_64/lib/cmake/Qt6Core
- Qt6Core5Compat_DIR -> C:/Qt/6.6.1/mingw_64/lib/cmake/Qt6Core5Compat
- Qt6CoreTools_DIR -> C:/Qt/6.6.1/mingw_64/lib/cmake/Qt6CoreTools
- Qt6EntryPointPrivate_DIR -> C:/Qt/6.6.1/mingw_64/lib/cmake/Qt6EntryPointPrivate
- Qt6Gui_DIR -> C:/Qt/6.6.1/mingw_64/lib/cmake/Qt6Gui
- Qt6GuiTools_DIR ->C:/Qt/6.6.1/mingw_64/lib/cmake/Qt6GuiTools
- Qt6Network_DIR ->C:/Qt/6.6.1/mingw_64/lib/cmake/Qt6Network
- Qt6OpenGL_DIR -> C:/Qt/6.6.1/mingw_64/lib/cmake/Qt6OpenGL
- Qt6OpenGLWidgets_DIR -> C:/Qt/6.6.1/mingw_64/lib/cmake/Qt6OpenGLWidgets
- Qt6Qml_DIR -> C:/Qt/6.6.1/mingw_64/lib/cmake/Qt6Qml
- Qt6QmlCompilerPlusPrivate_DIR -> Qt6QmlCompilerPlusPrivate_DIR-NOTFOUND
- Qt6QmlIntegration_DIR -> C:/Qt/6.6.1/mingw_64/lib/cmake/Qt6QmlIntegration
- Qt6QmlModels_DIR -> C:/Qt/6.6.1/mingw_64/lib/cmake/Qt6QmlModels
- Qt6QmlTools_DIR -> C:/Qt/6.6.1/mingw_64/lib/cmake/Qt6QmlTools
- Qt6Quick_DIR -> C:/Qt/6.6.1/mingw_64/lib/cmake/Qt6Quick
- Qt6Sql_DIR -> C:/Qt/6.6.1/mingw_64/lib/cmake/Qt6Sql
- Qt6Test_DIR -> C:/Qt/6.6.1/mingw_64/lib/cmake/Qt6Test
- Qt6Widgets_DIR -> C:/Qt/6.6.1/mingw_64/lib/cmake/Qt6Widgets
- Qt6WidgetsTools_DIR -> C:/Qt/6.6.1/mingw_64/lib/cmake/Qt6WidgetsTools
- Qt6ZlibPrivate_DIR -> C:/Qt/6.6.1/mingw_64/lib/cmake/Qt6ZlibPrivate

- VTK_DIR -> C:/dev/tools/mingw64/local/vtk-v9.2.6/lib/cmake/vtk-9.2

- ZLIB_LIBRARY_RELEASE -> C:/dev/zlib-1.3/build/install/lib/libzlibstatic.a
- ZLIB_INCLUDE_DIR -> C:/dev/zlib-1.3/build/install/include
- WITH_LIBUSB -> OFF
- WITH_CUDA -> OFF
- WITH_VTK -> ON

設定変更した後は “Generate” ボタンにより確認する。問題無ければ “Configure” ボタンを左クリックし、Configuration を実行する。Makefile はカレントディレクトリに生成されるので、以下のようにビルドを実行する。

mingw32-make
mingw32-make install

pcl はライブラリだけでなく、様々な点群処理の有用なツール実行アプリケーションを提供する。実行アプリケーションを使う場合は以下のように PATH を追加する。

SET PATH=%PATH%;C:\dev\pcl-1.13.1\build\install\bin

pkg-config ファイルは以下に格納される。

C:\dev\tools\mingw64\local\pcl-1.13.1\lib\pkgconfig

コマンドプロンプトを起動した際のディレクトリに設置する %HOMEPATH%\mingw64.bat に以下の記述を追加しておくと便利。

%HOMEPATH%\mingw64.bat(追加部分)

set PKG_CONFIG_PATH=%PKG_CONFIG_PATH%;C:\dev\tools\mingw64\local\pcl-1.13.1\lib\pkgconfig

pcl_viewer.exe などは様々なフォーマットの点群ファイルの可視化に有用。点群ファイルのサンプルは c:\dev\pcl-1.13.1\test に幾つか含まれる。例えば以下を試すと、二台の車の点群が表示され、マウスで視点を動かすことができる。

SET PATH=%PATH%;C:\dev\tools\mingw64\local\pcl-1.13.1\bin
c:\dev>c:\dev\pcl-1.13.1\test
c:\dev\pcl-1.13.1\test>pcl_viewer car6.pcd

また、pcl_pcd2ply.exe などのコンバーターは点群データのフォーマット変換を実現する。

opencv 4.8.1

opencv のインストールは既に説明しているが、今回は eigen を有効とするとともに、opencv_contrib を取り込んでビルドしてみる。ただし、opencv_contrib は素の opencv 以上に特許やライセンスなどに注意が必要。

インストールは以下の手順を実行する。

SET EIGEN_INCLUDE_DIR=C:/dev/tools/mingw64/local/eigen-3.4.0/include/eigen3
SET ZLIB_INCLUDE_DIR=C:/dev/tools/mingw64/local/zlib-1.3/include
SET ZLIB_LIBRARY_RELEASE=C:/dev/tools/mingw64/local/zlib-1.3/lib/libzlibstatic.a

git clone --depth 1 https://github.com/opencv/opencv_contrib.git -b 4.8.1 opencv_contrib-4.8.1
git clone --depth 1 https://github.com/opencv/opencv -b 4.8.1 opencv-4.8.1
cd opencv-4.8.1
mkdir build
cd build
cmake-gui ..

cmake-gui で MinGW-w64 用にgenerate を行う。

generate 完了後、以下の Config Key を編集する。

- BUILD_EXAMPLES -> OFF
- BUILD_JAVA -> OFF
- BUILD_opencv_python_tests -> OFF
- BUILD_opencv_java_bindings_generator -> OFF
- BUILD_opencv_python_bindings_generator -> OFF
- BUILD_SHARED_LIBS -> OFF
- CMAKE_BUILD_TYPE -> Release
- CMAKE_CONFIGURATION_TYPES -> Release
- CMAKE_INSTALL_PREFIX -> C:/dev/tools/mingw64/local/opencv-4.8.1
- Eigen3_DIR -> C:/dev/eigen-3.4.0/build
- EXECUTABLE_OUTPUT_PATH -> C:/dev/tools/mingw64/local/opencv-4.8.1/bin
- GIT_EXECUTABLE -> C:/Program Files/Git/cmd/git.exe
- OPENCV_GENERATE_PKGCONFIG -> ON
- OPENCV_EXTRA_MODULES_PATH -> C:/dev/opencv_contrib-4.8.1/
- PKG_CONFIG_EXECUTABLE -> C:/dev/tools/pkg-config/bin/pkg-config.exe
- WITH_CUDA -> OFF
- WITH_EIGEN -> ON
- WITH_GSTREAMER -> OFF
- WITH_OPENGL -> ON
- WITH_OBSENSOR -> OFF
- WITH_VTK -> OFF
- WITH_QT -> OFF

設定変更した後は “Generate” ボタンにより確認する。

問題無ければ “Configure” ボタンを左クリックし、Configuration を実行する。Makefile はカレントディレクトリに生成されるので、以下のようにビルドを実行する。

mingw32-make
mingw32-make install

他のアプリケーションやライブラリに組み込む際は、Cmake 実行前に、以下のように環境変数を設定する。

SET OPENCV_DIR=C:\dev\tools\mingw64\local\opencv-4.8.1
SET LIB=%LIB%;C:\dev\tools\mingw64\local\opencv-4.8.1\x64\mingw\staticlib\pkgconfig

また、opencv ライブラリを使ったアプリケーションで、opencv_videoio_ffmpeg481_64.dll を必要とする場合は、以下の PATH を追加する必要がある。

SET PATH=%PATH%;C:\dev\tools\mingw64\local\opencv-4.8.1\bin

opencv_videoio_ffmpeg481_64.dll への PATH が見つからない場合は VideoCapture でビデオファイルの open に失敗する。これはエラー表示も出てこないので注意が必要。

pkg-config ファイルは以下に格納される。

C:\dev\tools\mingw64\local\opencv-4.8.1\x64\mingw\staticlib\pkgconfig

コマンドプロンプトを起動した際のディレクトリに設置する %HOMEPATH%\mingw64.bat に以下の記述を追加しておくと便利。

%HOMEPATH%\mingw64.bat(追加部分)

set PKG_CONFIG_PATH=%PKG_CONFIG_PATH%;C:\dev\tools\mingw64\local\opencv-4.8.1\x64\mingw\staticlib\pkgconfig

設定用バッチファイル

以上、いくつかの MinGW-w64 でビルドした C++ スタティックリンクライブラリを用意した。これらを使って環境を整えるために、コマンドプロンプトを起動した際のディレクトリ  %HOMEPATH%  に、以下のバッチファイルを設置する。

%HOMEPATH%\mingw64.bat

SET PATH=%PATH%;"C:\Program Files\7-Zip"
SET PATH=%PATH%;C:\dev\tools\pkg-config\bin
SET PATH=C:\dev\tools\Python\Python312\Scripts;C:\dev\tools\Python\Python312;%PATH%
SET PATH=C:\dev\tools\mingw64\bin;%PATH%

SET CMAKE_PREFIX_PATH=C:/dev/tools/mingw64/local
SET PATH=%PATH%;C:\dev\tools\mingw64\local
SET PATH=C:\dev\godot-4.2.1-stable\bin;%PATH%

set PKG_CONFIG_EXE_DIR=C:\dev\tools\pkg-config\bin
set PKG_CONFIG_PATH=""
set PKG_CONFIG_PATH=%PKG_CONFIG_PATH%;C:\dev\tools\mingw64\local\boost_1_81_0\lib\pkgconfig
set PKG_CONFIG_PATH=%PKG_CONFIG_PATH%;C:\dev\tools\mingw64\local\zlib-1.3\lib\pkgconfig
set PKG_CONFIG_PATH=%PKG_CONFIG_PATH%;C:\dev\tools\mingw64\local\lz4-v1.9.4\lib\pkgconfig	
set PKG_CONFIG_PATH=%PKG_CONFIG_PATH%;C:\dev\tools\mingw64\local\eigen-3.4.0\share\pkgconfig
set PKG_CONFIG_PATH=%PKG_CONFIG_PATH%;C:\dev\tools\mingw64\local\freeglut-3.4.0\lib\pkgconfig
set PKG_CONFIG_PATH=%PKG_CONFIG_PATH%;C:\dev\tools\mingw64\local\glew-2.1.0\lib\pkgconfig
set PKG_CONFIG_PATH=%PKG_CONFIG_PATH%;C:\dev\tools\mingw64\local\hdf5-1.10.5\lib\pkgconfig
set PKG_CONFIG_PATH=%PKG_CONFIG_PATH%;C:\dev\tools\mingw64\local\flann-1.9.1\lib\pkgconfig
set PKG_CONFIG_PATH=%PKG_CONFIG_PATH%;C:\dev\tools\mingw64\local\vtk-v9.2.6\lib\pkgconfig
set PKG_CONFIG_PATH=%PKG_CONFIG_PATH%;C:\dev\tools\mingw64\local\qhull-v8.0.2\lib\pkgconfig
set PKG_CONFIG_PATH=%PKG_CONFIG_PATH%;C:\dev\tools\mingw64\local\bullet-3.25\lib\pkgconfig
set PKG_CONFIG_PATH=%PKG_CONFIG_PATH%;C:\dev\tools\mingw64\local\pcl-1.13.1\lib\pkgconfig
set PKG_CONFIG_PATH=%PKG_CONFIG_PATH%;C:\dev\tools\mingw64\local\opencv-4.8.1\x64\mingw\staticlib\pkgconfig

set PKG_CONFIG_PATH=%PKG_CONFIG_PATH%;C:\Qt\6.6.1\mingw_64\lib\pkgconfig

cd c:\dev

コマンドプロンプトを開いたとき、%HOMEPATH% (例えば “C:\Users\user”)から開始されるので、最初に 以下を実行することにより必要な設定が一括で行われて便利。

C:\C:\Users\user>.\mingw64

無論これは、MinGW-w64 用であり、他のプラットフォームビルドチェーン用には、それぞれ専用の設定用バッチファイルを用意する。

終わりに

一応本稿で 「Godot GDEXTENSION build 環境構築のまとめ」 と題する一連の記事は終わりにしようと思う。

これらビルド環境構築の情報は生鮮食品と同じで、賞味期限が著しく短い。Godot は著しく成長していて、その過程で不要なものをごっそりと削り落とすような決断を多々しているようだ。本稿が意味を持つのも一年くらいだろうか。

その短い期間であっても、この一連の記事が誰かの役に立てれば嬉しい。そして 日本の Godot および GDEXTENSION 開発が活発になり、WEB 上の日本語の記事が増えてゆくことを望んでいる。

ここまで読んでくれた貴方に感謝。

コメント

タイトルとURLをコピーしました