PositionBasedDynamics のコンパイル

2017年1月20日

はじめに

SPlisHSPlasH も用いられている剛体計算の Position Based Dynamics (PBD) コード PositionBasedDynamics のコンパイルについてのメモ。

バージョン

  • PositionBasedDynamics 1.6.0 (Releases からダウンロード)
  • Ubuntu 16.04 LTS

PositionBasedDynamics のコンパイル

パッケージの展開。

$ mkdir build
$ tar xvzf PositionBasedDynamics-1.6.0.tar.gz -C build
$ cd build/PositionBasedDynamics-1.6.0

コンパイル。

$ mkdir build
$ cd build
$ cmake ..
$ make

エラーで止まった。

[ 10%] Building CXX object discregrid/CMakeFiles/Discregrid.dir/src/discrete_grid.cpp.o
...
/usr/include/c++/5/bits/c++0x_warning.h:32:2: error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support must be enabled with the -std=c++11 or -std=gnu++11 compiler options.
 #error This file requires compiler and library support \

extern/Discregrid/src/ExternalProject_Discregrid/CMakeLists.txt に以下を追加。

set (CMAKE_CXX_STANDARD 11)

またエラー。

[ 67%] Building CXX object Demos/DistanceFieldDemos/CMakeFiles/DeformableCollisionDemo.dir/__/Visualization/Shader.cpp.o
[ 68%] Linking CXX executable ../../../bin/DeformableCollisionDemo
../../../lib/libSimulation.a(DistanceFieldCollisionDetection.cpp.o): 関数 `PBD::DistanceFieldCollisionDetection::collisionDetection(PBD::SimulationModel&)' 内:
DistanceFieldCollisionDetection.cpp:(.text+0x293): `omp_get_max_threads' に対する定義されていない参照です

Demos/DistanceFieldDemos/CMakeLists.txt の以下の行

  find_package(GLUT REQUIRED)
  find_package(OpenGL REQUIRED)
の下に以下のように追加。
  find_package(OpenMP)
  if (OPENMP_FOUND)
          set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
  endif(OPENMP_FOUND)

こちら でパッチが提供されていた。

$ mv Demos.openmp.patch.txt ~/build/SPlisHSPlasH-1.3.1
$ cd ~/build/SPlisHSPlasH-1.3.1
$ patch -p1 < Demos.openmp.patch.txt

さらにエラー。

[ 99%] Building CXX object Demos/SceneLoaderDemo/CMakeFiles/SceneLoaderDemo.dir/__/Visualization/Shader.cpp.o
[100%] Linking CXX executable ../../../bin/SceneLoaderDemo
/usr/bin/ld: /home/xxx/build/PositionBasedDynamics-1.6.0/extern/install/Discregrid/lib/libDiscregrid.a(cubic_lagrange_discrete_grid.cpp.o): シンボル 'pthread_create@@GLIBC_2.2.5' への未定義参照です
//lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command line

対応できなかったので、コンパイルから外す。

Demos/CMakeLists.txt

        #SceneLoaderDemo

デモの実行

$ cd ../bin
$ ./RigidBodyCollisionDemo