ズバリの記載がネットで見つけづらかったので書いておく。
このエラー。
mtrand.cpython-35m-arm-linux-gnueabihf.so: undefined symbol: PyFPE_jbuf
当方は以下の環境で発生。
・RaspberryPi Zero Stretch Lite
・pyenv virtualenv
・Python 3.4.8、3.5.6
・numpy 1.14.5
import numpy を行うと上記のエラーで落ちる。
pyenv 環境でない通常の?OS直下のpython&numpyは普通に動く。
ネットではpyenv以外のnumpyと衝突しているとか載っているが、全然上手くいかない。
色々と回り道とトライ&エラーの結局、以下のページを参考してPythonインストール時のコンパイルオプションを指定することで対応できた。
・undefined symbol: PyFPE_jbuf on stock Ubuntu 17.10
・pyenv Python 2.7 install to match Ubuntu server settings
・Fix fpectl-induced ABI breakage
今回の事象は、いまいちスッキリしないが以下の感じ?
・import numpy すると下の方で mtrand が import される。
・mtrand は PyFPE_jbuf を呼んでいる。
・Python が --with-fpectl なしでビルドされていると PyFPE_jbuf は作成されていない。
・結果落ちる。
mtrand.cpython-35m-arm-linux-gnueabihf.so の中を見ると確かに呼んでいる。
$ nm mtrand.cpython-35m-arm-linux-gnueabihf.so | grep PyFPE_jbuf
U PyFPE_jbuf
こちらで上手くいった方法。
--with-fpectl 以外のオプションはやってみて拙かったら後で変える体で。(分かってない)
export PYTHON_CONFIGURE_OPTS="--enable-ipv6\
--enable-unicode=ucs4\
--with-dbmliborder=bdb:gdbm\
--with-system-expat\
--with-system-ffi\
--with-fpectl"
pyenv install -f 3.5.6
pyenv virtualenv 3.5.6 p356
source activate p356
pip install numpy===1.14.5
python
> import numpy
うっし!