CODE $\Sigma$

2023/03/26
bullet-pysicsをMinGWを用いてbuildする

Bullet 物理計算ライブラリをMinGWを用いてBuildしたので、その備忘録です。

デフォルトの設定でbuildすると、グラフィックス関連の処理をビルドする際に失敗するので、以下のサイトに記されている設定にすることでbuildを通過させました。

https://choreonoid.org/ja/manuals/latest/install/build-bullet-plugin.html

したがって、exampleの実行できません。

ダウンロードしたbullet physicsのbuildから、既存のCMakeProjectへの組み込みまで行いました。

CMakeの設定

適当にbuildフォルダを作成し、CMakeLists.txtとbuildフォルダのパスをcmake-guiに設定します。

上記のURLにあるように、以下の設定にします。

ONに設定する項目:
BUILD_EXTRAS
INSTALL_EXTRA_LIBS
INSTALL_LIBS
USE_DOUBLE_PRECISION
USE_MSVC_RUNTIME_LIBRARY_DLL

OFFに設定する項目:
BUILD_XX_DEMOS
BUILD_BULLET3
BUILD_PYBULLET
BUILD_UNIT_TESTS

新たにinstallディレクトリを作成し、そのパスをCMAKE_INSTALL_PREFIXに指定します。
文字列を指定:
CMAKE_INSTALL_PREFIX=/path/to/install
CMAKE_BUILD_TYPE=Release

設定出来たら、generateします。

コマンドプロンプトを開き、以下のコマンドを実行。

cd /path/to/build
cmake --build .
cmake --install .

先ほど指定したinstallフォルダに諸ライブラリがコピーされていると思うので、これを開発中のプロジェクトにコピーします。

既存のCMakeプロジェクトへの組み込み

無理やりな感じが否めないですが、以下のように書くことでbullet physicsのリンクができました。

cmake_minimum_required (VERSION 3.8)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED true)

project ("TestProject" VERSION 0.0)

if (MSVC)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
else()
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
endif()


set (Bullet_DIR "${PROJECT_SOURCE_DIR}/dependencies/bullet/lib/cmake/bullet")
set (Bullet_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/dependencies/bullet/include/bullet")
set (Bullet_LIBRARY_DIRS "${PROJECT_SOURCE_DIR}/dependencies/bullet/lib")
set (BULLET_DEFINITIONS  "-DBT_USE_DOUBLE_PRECISION" )
set (BULLET_LIBRARIES    "LinearMath;Bullet3Common;BulletInverseDynamics;BulletCollision;BulletDynamics;BulletSoftBody;LinearMath" )

find_package(Bullet CONFIG REQUIRED)

link_directories(${Bullet_LIBRARY_DIRS})
add_definitions ( ${BULLET_DEFINITIONS} )
add_executable (${CMAKE_PROJECT_NAME} "${PROJECT_SOURCE_DIR}/src/main/main.cpp")
target_link_libraries(${CMAKE_PROJECT_NAME} ${BULLET_LIBRARIES})

もし、undefined refrenceなどの関数未定義エラーが発生した場合、target_link_librariesにLinearMathやBulletCollisionを新たに追加してみてください。