📚

RaspberryPi Zeroでgattlibのインストールが失敗する

2022/06/23に公開

はじめに

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