clang が fatal error: 'cmath' file not found でビルド失敗する
Page content
pip でとあるモジュールをインストールしようとしたところ、 次の clang のエラーでインストールが失敗した。
fatal error: 'cmath' file not found
今回は、このエラーの対応方法の話。
原因
pip のモジュールインストールは、python スクリプトのインストールだけでなく、 C 言語等の別言語で開発されているライブラリのビルドも行なう。
このビルドにおいて、C 言語は C コンパイラ、 C++ 言語は C++ コンパイラが当然利用される。
では、このコンパイラに何か使われるか?というと、 特に指定がない場合は、 setuptools をビルドした時に指定したコンパイラが利用されるらしい。
setuptools をビルドした時に指定したコンパイラと、 ローカルのコンパイラの情報が一致していれば、 今回のネタになっているエラーは発生しないはずだが、 なんらかの理由でコンパイラが異なると、エラーが発生する。
対策
では、どうすれば良いか?というと、 最も簡単なのは環境変数を指定する方法になる。
具体的には次の環境変数を指定すれば良い。
- CC
- CXX
ここで、 CC は c コンパイラ, CXX は C++ コンパイラを指定する。
具体的には、次のように設定する。
export CC=gcc export CXX=g++
これによって、 pip で利用されるコンパイラが clang ではなく gcc に切り替わる。
なお、 コンパイラが切り替わっても、切り替え先の gcc がインストールされていないと同様にエラーになるので、 インストールされていない場合はインストールする必要がある。
gcc のインストールは OS のパッケージマネージャを使えば良い。
以上。