質問: ubuntuでopenmpiを使い並列計算用のコード(hogehoge.cpp)を、静的ライブラリオプション-staticをつけてコンパイルしたいと思っています。 staticオプションなしではコンパイルは通ります. しかし,以下のように-staticをつけ、 ``` mpicxx \ -static -Ofast -fopenmp -std=c++11 -fpermissive \ -I../../include -I../../tools/external/voro++/src -I/usr/include/mpi -I/usr/include \ hogehoge.cpp -o hogehoge \ -L../../lib -L/usr/lib -L/usr/lib/opnmpi/lib \ -lfftw3 -lgomp -lm ``` コンパイルすると、 ``` /usr/bin/ld: -lmpi_cxx が見つかりません /usr/bin/ld: -lmpi が見つかりません ``` と出力されます。 以下のリンク先の英語のサイト ”ld - "cannot find -lmpi*" when compiling openmpi code - Ask Ubuntu” でもよく似た質問があり、このときはstaticを外せば解決としていますが、私の場合はstaticを外せられません。 また、リンク先でもあるように、lmpiのLD_LIBRALY_PATHを設定しても、うまくいきません。 libmpi.so、libmpi_cxx.so以外の他のライブラリ(-lfftw3, -lm等)にはエラーは出ず、lmpiとlmpi_cxxでエラーが出ます。 staticをつけて、最初に書いたmpicxxでコンパイルが通るようにする方法、またはリンク先の英語サイトの人がstaticでコンパイルできるやりかたを教えていただけないでしょうか。 よろしくお願いいたします。
回答: こんにちは。 その現象の場合、OpenMPIのstaticライブラリがビルドされていないように思います。 OpenMPIを使ったことはないのですが、検索するとGithubのOpenMPIリポジトリが出てきました。ここの中央付近に"INSTALLATION OPTIONS"という項目があります。 ここを見ると、OpenMPIはデフォルトでは共有ライブラリのみビルドされるようです。 `--disable-shared`と`--enable-static`の両方を付けてOpenMPIをビルドすれば、staticライブラリのみがビルドされるようです。 OpenMPIをstaticライブラリとしてビルド後にahillさんのプログラムとリンクすれば良いように思います。