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 のパッケージマネージャを使えば良い。

以上。