📚
RaspberryPi Zeroでgattlibのインストールが失敗する
はじめに
pybluezの拡張期のである、pybluez[ble]のインストールに失敗した。
こちらの記事を確認することを推奨する。
発生したエラー
$ sudo pip3 install gattlib
arm-linux-gnueabihf-gcc: fatal error: Killed signal terminated program cc1plus
compilation terminated.
error: command 'arm-linux-gnueabihf-gcc' failed with exit status 1
----------------------------------------
Failed building wheel for gattlib
Running setup.py clean for gattlib
Failed to build gattlib
$ dmesg
[ 1166.930902] oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),global_oom,task_memcg=/,task=cc1plus,pid=493,uid=0
[ 1166.930952] Out of memory: Killed process 493 (cc1plus) total-vm:480436kB, anon-rss:376708kB, file-rss:148kB, shmem-rss:0kB, UID:0 pgtables:470kB oom_score_adj:0
[ 1167.168126] oom_reaper: reaped process 493 (cc1plus), now anon-rss:0kB, file-rss:0kB, shmem-rss:0kB
こちらの記事でも同じエラーが発生しており、RaspberryPi Zeroではメモリが足りないと記述している。
解決
スワップファイルサイズを変更する
こちらの記事を参考にする。
/etc/dphys-swapfileを変更する
sudo vi /etc/dphys-swapfile
CONF_SWAPSIZE=100 //変更前
CONF_SWAPSIZE=1024 //変更後
スワップファイルの再起動
sudo /etc/init.d/dphys-swapfile stop
sudo /etc/init.d/dphys-swapfile start
インストールをする
こちらの記事を参考にする。
pybluez[ble]をインストールし、gattlibのバージョンを確認する
確認したら、Ctrl+C
で中止する。
pip3 install pybluez[ble]
Collecting gattlib==0.20150805; extra == "ble" (from pybluez[ble])
この場合gattlib==0.20150805
がバージョンになる。
PyPi(gattlib)でも確認ができる。
pipからダウンロードをする
pip download gattlib==0.20150805
解凍する
tar xvzf ./gattlib-0.20150805.tar.gz
boost_pythonのバージョンを確認する
最新のバージョンが出力されたらそれを確認する。
sudo find / -name "libboost_python*"
/usr/lib/arm-linux-gnueabihf/libboost_python37.a
/usr/lib/arm-linux-gnueabihf/libboost_python27.a
/usr/lib/arm-linux-gnueabihf/libboost_python37.so
/usr/lib/arm-linux-gnueabihf/libboost_python3.a
/usr/lib/arm-linux-gnueabihf/libboost_python27.so.1.67.0
/usr/lib/arm-linux-gnueabihf/libboost_python3.so
/usr/lib/arm-linux-gnueabihf/libboost_python3-py37.a
/usr/lib/arm-linux-gnueabihf/libboost_python37.so.1.67.0
/usr/lib/arm-linux-gnueabihf/libboost_python.so
/usr/lib/arm-linux-gnueabihf/libboost_python3-py37.so
/usr/lib/arm-linux-gnueabihf/libboost_python27.so
/usr/lib/arm-linux-gnueabihf/libboost_python.a
この場合は37
...?
setup.pyを編集する
boost_pythonのバージョンを確認するで取得したバージョンを、以下のコマンドに入れる。
sed -ie 's/boost_python-py34/boost_python-py{XX}/' setup.py
私の場合は sed -ie 's/boost_python-py34/boost_python-py37/' setup.py
インストールする
sudo pip3 install .
sudo pip3 pybluez[ble]
/usr/bin/ld: cannot find -lboost_python-py37と出る場合
sedを変更する
sed -ie 's/boost_python-py{XX}/boost_python3/' setup.py
Discussion