VTK のコンパイル

2020年9月15日

はじめに

VTK のコンパイルについてのメモ。

環境

  • Ubuntu 16.04 LTS/CentOS 6.5/Windows 10
  • VTK 8.2.0/7.1.1
  • Anaconda3 (Minicoda3)

メモ

VTK を PyQt/PySide で使いたかった。したがって、以下では Qt と Python を有効にしようといろいろやっているが、Qt の設定はいらなかったぽい。

ポイント

  • 新しい VTK は新しい OpenGL を使うので、環境によっては機能しないことがある。その場合は VTK 7 を使う。
  • cmake 前に Anaconda3 を有効にする。

Ubuntu 16.04 LTS の VTK 7.1.1 の設定が最終版。

ソースコードの入手

こちら からソースコードを入手する。

Ubuntu 16.04 LTS

  • gcc 5.4.0
  • cmake 3.16.2
  • Python 3.7.8 (Miniconda3)

VTK 8.2.0

準備。

$ mkdir build
$ tar xvzf VTK-8.2.0.tar.gz -C build
$ cd build/VTK-8.2.0
$ mkdir VTK-build
$ cd VTK-build

ここでは、Qt5 (Anaconda3 のもの) とともに利用するものとし、$HOME/opt 以下にインストールすることにする。

$ cmake .. \
  -DVTK_QT_VERSION:STRING=5 \
  -DQT_QMAKE_EXECUTABLE:PATH=$HOME/anaconda3/bin/qmake \
  -DVTK_Group_Qt:BOOL=ON \
  -DCMAKE_PREFIX_PATH:PATH=/usr/bin/cmake  \
  -DBUILD_SHARED_LIBS:BOOL=ON \
  -DCMAKE_INSTALL_PREFIX=$HOME/opt/VTK-8.2.0

ビルド & インストール。

$ make -j4
$ make install

インストールディレクトリを設定。

~/.bashrc

export VTK_DIR=$HOME/opt/VTK-8.2.0

VTK 7.1.1

古い OpenGL ライブラリを使う場合は、VTK 7 を使う。

準備

$ mkdir build
$ tar xvzf VTK-7.1.1.tar.gz -C build
$ cd build/VTK-7.1.1
$ mkdir VTK-build
$ cd VTK-build

古い OpenGL を使うように指定している。Python Wrapping を有効にして、Python 3.7 を用いる。Anaconda3 を有効にしておく。

$ cmake .. \
  -DVTK_RENDERING_BACKEND:STRING=OpenGL \
  -DVTK_WRAP_PYTHON:BOOL=ON \
  -DVTK_PYTHON_VERSION:STRING=3.7 \
  -DBUILD_SHARED_LIBS:BOOL=ON \
  -DCMAKE_INSTALL_PREFIX:PATH=$HOME/opt/VTK-7.1.1

ビルド。

$ make -j4

エラーが出た。

/home/xxxx/build/VTK-7.1.1/Wrapping/PythonCore/vtkPythonArgs.cxx: In instantiation of ‘bool vtkPythonGetStringValue(PyObject*, T*&, const char*) [with T = char; PyObject = _object]’:
/home/xxxx/build/VTK-7.1.1/Wrapping/PythonCore/vtkPythonArgs.cxx:287:66:   required from here
/home/xxxx/build/VTK-7.1.1/Wrapping/PythonCore/vtkPythonArgs.cxx:105:25: error: invalid conversion from ‘const char*’ to ‘char*’ [-fpermissive]
     a = PyUnicode_AsUTF8(o);

以下のように修正。

a = const_cast<char*>(PyUnicode_AsUTF8(o));

インストール。

$ make install

~/.bashrc に以下のように追加する。

PYTHONPATH=$HOME/opt/VTK-7.1.1/lib/python3.7/site-packages:$PYTHONPATH
LD_LIBRARY_PATH=$HOME/opt/VTK-7.1.1/lib:$LD_LIBRARY_PATH

CentOS 6.5

gcc のセットアップ

gcc バージョンが足りないので、まず gcc を用意する。

$ gcc --version
gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-23)

SCL (Software Collections) を入れる。

$ sudo yum install scl-utils
$ cd /etc/yum.repos.d/
$ sudo wget http://people.centos.org/tru/devtools-2/devtools-2.repo
$ sudo yum install devtoolset-2-gcc devtoolset-2-binutils
$ sudo yum install devtoolset-2-gcc-c++ devtoolset-2-gcc-gfortran
$ scl enable devtoolset-2 bash
$ gcc --version
gcc (GCC) 4.8.2 20140120 (Red Hat 4.8.2-15)

~/.bashrc に以下の行を追加する。

. scl_source enable devtoolset-2

参考

VTK 8.2.0

準備。

$ mkdir build
$ tar xvzf VTK-8.2.0.tar.gz -C build
$ cd build/VTK-8.2.0
$ mkdir VTK-build
$ cd VTK-build

VTK のコンパイルに必要なものをインストールする。

$ sudo yum install mesa-libGL-devel
$ sudo yum install libXt-devel

CMake には 3.17.1 を用いる。Qt5 には Miniconda3 のものを用いる。

$ cmake .. \
  -DVTK_QT_VERSION:STRING=5 \
  -DQt5_DIR:PATH=$HOME/miniconda3/pkgs/qt-5.12.5-hd8c4c69_1/lib/cmake/Qt5 \
  -DQT_QMAKE_EXECUTABLE:PATH=$HOME/miniconda3/bin/qmake \
  -DVTK_Group_Qt:BOOL=ON \
  -DCMAKE_PREFIX_PATH:PATH=$HOME/opt/cmake-3.17.1/bin/cmake  \
  -DBUILD_SHARED_LIBS:BOOL=ON \
  -DCMAKE_INSTALL_PREFIX=$HOME/opt/VTK-8.2.0

$ LD_LIBRARY_PATH=$HOME/miniconda3/lib:$LD_LIBRARY_PATH make -j4
$ make install

~/.bashrc に以下の設定を追加。

PYTHONPATH=$HOME/opt/VTK-8.2.0/lib64/python3.7/site-packages:$PYTHONPATH
LD_LIBRARY_PATH=$HOME/opt/VTK-8.2.0/lib64:$LD_LIBRARY_PATH

VTK 7.1.1

古い OpenGL ライブラリを使う場合は、VTK 7 を使う。

準備

$ mkdir build
$ tar xvzf VTK-7.1.1.tar.gz -C build
$ cd build/VTK-7.1.1
$ mkdir VTK-build
$ cd VTK-build

古い OpenGL を使うように指定している。Python Wrapping を有効にして、Python 3.7 を用いる。Anaconda を有効にしておく。

$ cmake .. \
  -DVTK_RENDERING_BACKEND:STRING=OpenGL \
  -DVTK_QT_VERSION:STRING=5 \
  -DQt5_DIR:PATH=$HOME/miniconda3/pkgs/qt-5.12.5-hd8c4c69_1/lib/cmake/Qt5 \
  -DQT_QMAKE_EXECUTABLE:PATH=$HOME/miniconda3/bin/qmake \
  -DVTK_Group_Qt:BOOL=ON \
  -DVTK_WRAP_PYTHON:BOOL=ON \
  -DVTK_PYTHON_VERSION:STRING=3.7 \
  -DCMAKE_PREFIX_PATH:PATH=$HOME/opt/cmake-3.17.1/bin/cmake  \
  -DBUILD_SHARED_LIBS:BOOL=ON \
  -DCMAKE_INSTALL_PREFIX:PATH=$HOME/opt/VTK-7.1.1

$ LD_LIBRARY_PATH=$HOME/miniconda3/lib:$LD_LIBRARY_PATH make -j4
$ make install

エラーが出る。

/home/xxxx/build/VTK-7.1.1/Wrapping/PythonCore/vtkPythonArgs.cxx: In instantiation of ‘bool vtkPythonGetStringValue(PyObject*, T*&, const char*) [with T = char; PyObject = _object]’:
/home/xxxx/build/VTK-7.1.1/Wrapping/PythonCore/vtkPythonArgs.cxx:287:66:   required from here
/home/xxxx/build/VTK-7.1.1/Wrapping/PythonCore/vtkPythonArgs.cxx:105:27: error: invalid conversion from ‘const char*’ to ‘char*’ [-fpermissive]
     a = PyUnicode_AsUTF8(o);

以下のように修正する。

a = const_cast<char*>(PyUnicode_AsUTF8(o));

~/.bashrc に以下のように追加する。

PYTHONPATH=$HOME/opt/VTK-7.1.1/lib/python3.7/site-packages:$PYTHONPATH
LD_LIBRARY_PATH=$HOME/opt/VTK-7.1.1/lib:$LD_LIBRARY_PATH

Windows 10

  • Visual Studio 2017

VTK 7.1.1

Python なし

ソースディレクトリの中で実行。

>mkdir VTK-build
>cd VTK-build
>cmake .. -G "Visual Studio 15 2017 Win64" ^
  -DVTK_RENDERING_BACKEND:STRING=OpenGL ^
  -DVTK_WRAP_PYTHON:BOOL=ON ^
  -DBUILD_SHARED_LIBS:BOOL=ON ^
  -DCMAKE_INSTALL_PREFIX:PATH=C:\work\VTK-7.1.1-bin

ビルド。

>msbuild VTK.sln /p:configuration=release /p:platform=x64 /m:4
>msbuild INSTALL.vcxproj /p:configuration=release /p:platform=x64

Python あり

>mkdir VTK-py-build
>cd VTK-py-build
>cmake .. -G "Visual Studio 15 2017 Win64" ^
  -DVTK_RENDERING_BACKEND:STRING=OpenGL ^
  -DVTK_WRAP_PYTHON:BOOL=ON ^
  -DBUILD_SHARED_LIBS:BOOL=ON ^
  -DVTK_WRAP_PYTHON:BOOL=ON ^
  -DVTK_PYTHON_VERSION:STRING=3.7 ^
  -DCMAKE_INSTALL_PREFIX:PATH=C:\work\VTK-7.1.1-bin

ビルド。

>msbuild VTK.sln /p:configuration=release /p:platform=x64 /m:4
>msbuild INSTALL.vcxproj /p:configuration=release /p:platform=x64

エラー。

vtk-7.1.1\wrapping\pythoncore\vtkpythonargs.cxx(105): error C2440: '=': 'const char *' から 'T *' に変換できません。

以下のように修正。

//    a = PyUnicode_AsUTF8(o);
    a = const_cast<char*>(PyUnicode_AsUTF8(o));

参考