OpenFOAM 2.3.0 を Ubuntu 12.04 LTS にインストールメモ (Clang コンパイル)

2014年9月20日

はじめに

OpenFOAM 2.3.0 を Clang でコンパイルする。

インストール対象マシン

Ubuntu Desktop 12.04 LTS (x86_64)。

OpenFOAM 2.3.0 バイナリ版インストール済み。

コンパイル環境の準備

$ sudo apt-get install build-essential flex bison cmake zlib1g-dev qt4-dev-tools libqt4-dev gnuplot libreadline-dev libncurses-dev libxt-dev
$ sudo apt-get install libscotch-dev libopenmpi-dev libcgal-dev

2 つ目は必要ない?

また、Clang 3.4 をインストールしておく。

$ sudo apt-get install clang3.4

パッケージの準備

パッケージを準備する。

$ mkdir ~/OpenFOAM
$ tar xvzf OpenFOAM-2.3.0.tgz -C ~/OpenFOAM
$ tar xvzf ThirdParty-2.3.0.tgz -C ~/OpenFOAM

~/.bashrc に以下を追加。

. ~/OpenFOAM/OpenFOAM-2.3.0/etc/bashrc

~/.bashrc の読み込み。

$ . ~/.bashrc

コンパイル

設定ファイルを編集。

$WM_PROJECT_DIR/etc/bashrc

#export WM_COMPILER=Gcc
export WM_COMPILER=Clang

...

#export WM_MPLIB=OPENMPI
export WM_MPLIB=SYSTEMOPENMPI

$WM_PROJECT_DIR/wmake/rules/linux64Clang/c++

c++WARN     = -Wall -Wextra -Wno-unused-parameter -Wold-style-cast -Wnon-virtual-dtor -Wno-overloaded-virtual -Wno-unused-comparison -Wno-deprecated-register

...

c++FLAGS    = $(GFLAGS) $(c++WARN) $(c++OPT) $(c++DBUG) $(ptFLAGS) $(LIB_HEADER_DIRS) -fPIC -std=c++11

"c++WARN" に "-Wno-deprecated-register"、"c++FLAGS" に "-std=c++11" を追加している。C++11 を使用したいため。

~/.bashrc の読み込み。

$ . ~/.bashrc

このままコンパイルを実行すると、CGAL でエラーが出たため、次のパッケージをインストールした。

  • qt3-dev-tools
  • libboost-system1.46-dev

コンパイル。

$ cd $WM_PROJECT_DIR
$ ./Allwmake

ParaView のコンパイル

ParaView をコンパイルする前に、CMake をコンパイルする。

$ cd $WM_THIRD_PARTY_DIR
$ ./makeCmake
$ . ~/.bashrc

ParaView をコンパイル。

$ ./makeParaView4 -python -python-lib /usr/lib/libpython2.7.so.1.0 -mpi

エラーが出た。

Linking C shared module ../../../lib/site-packages/mpi4py/MPI.so
CMakeFiles/mpi4py.MPI.dir/src/MPI.c.o: In function `OPENMPI_dlopen_libmpi':
MPI.c:(.text+0x86b1): undefined reference to `dlopen'
MPI.c:(.text+0x86cd): undefined reference to `dlopen'
MPI.c:(.text+0x86e3): undefined reference to `dlopen'
MPI.c:(.text+0x86f9): undefined reference to `dlopen'
CMakeFiles/mpi4py.MPI.dir/src/MPI.c.o: In function `__pyx_pf_6mpi4py_3MPI_16Init':
MPI.c:(.text+0x31897): undefined reference to `dlopen'
CMakeFiles/mpi4py.MPI.dir/src/MPI.c.o:MPI.c:(.text+0x3194d): more undefined references to `dlopen' follow
collect2: ld はステータス 1 で終了しました
make[2]: *** [lib/site-packages/mpi4py/MPI.so] エラー 1
make[1]: *** [ThirdParty/mpi4py/vtkmpi4py/CMakeFiles/mpi4py.MPI.dir/all] エラー 2
make: *** [all] エラー 2

Open MPI のバージョンの問題らしい。build/linux64Clang/ParaView-4.1.0/ThirdParty/mpi4py/vtkmpi4py/CMakeFiles/mpi4py.MPI.dir/link.txt に "-ldl" を追加する。

やりなおし (続きから)。

$ ./makeParaView4 -python -python-lib /usr/lib/libpython2.7.so.1.0 -mpi -rebuild

OpenFOAM プラグインのコンパイル。

$ cd $FOAM_UTILITIES/postProcessing/graphics/PV4Readers
$ ./Allwclean
$ ./Allwmake