Edited at

Raspberry Pi でビルドがこんな感じで失敗したときの対処 ”collect2: ld terminated with signal 9 [Killed]”

More than 3 years have passed since last update.


結論

メモリ不足でリンクが失敗している。対処は

1. CPU に偏った(GPUにメモリをあげない)メモリ設定

2. スワップファイルを増やす

前者ですめばラッキーですが、だめなときは後者、ただし物凄く時間がかかります...


経緯

メモリが256MByte しかない初期型 Raspberry Pi 上で ffmpeg をビルドしていて表題の現象でリンクに失敗しました。調べてみるとメモリ不足によるリンクの失敗なのだそうです。

そこで、raspi-config で CPU と GPU のメモリ配分を極端に CPU 側に倒し(GPU 16MByte、残り CPU)にしたのですが現象は変わらず。

仕方がないのでスワップファイルをデフォルトの100MByte から1GByte に増やしたら、なんとか4時間かけてビルドできました


これに4時間かかりました...

pi@raspberrypi /usr/src/ffmpeg $ sudo make

LD ffmpeg_g
CP ffmpeg
STRIP ffmpeg
CC ffprobe.o
ffprobe.c: In function ‘value_string.isra.11.constprop.16’:
ffprobe.c:256:21: warning: ‘vali’ may be used uninitialized in this function [-Wuninitialized]
LD ffprobe_g

CP ffprobe
STRIP ffprobe
CC ffserver.o
LD ffserver_g
CP ffserver
STRIP ffserver
pi@raspberrypi /usr/src/ffmpeg $



作業


1. メモリ設定の変更


1.1 raspi-config を起動する

pi@raspberrypi /usr/src/ffmpeg $ sudo raspi-config


1.2 こんな画面が開くので、8. Advanced Option を選択

スクリーンショット 2014-06-20 12.18.49.png


1.3 A3 Memory Split を選択

スクリーンショット 2014-06-20 12.19.31.png


1.3 GPU のメモリを 16MByte に設定

スクリーンショット 2014-06-20 12.19.53.png


1.4 下矢印キーで Finish を選択

スクリーンシ![アップロード中 スクリーンショット 2014-06-20 12.19.53.png]()ョット 2014-06-20 12.20.33.png


1.5 Yes でreboot。No で後でリブートしてもよいです

スクリーンショット 2014-06-20 12.20.52.png


2. スワップファイルの増加

$ sudo service dphys-swapfile stop

$ sudo nano /etc/dphys-swapfile
$ sudo service dphys-swapfile start


2.1 dphys-swapfile を止める


2.2 nano editor が開いたら、デフォルトで 100になっている CONF_SWAPSIZE を 1024 に変更

スクリーンショット 2014-06-20 12.35.23.png


2.3 control + o で保存、control + x で nano を終了


2.4 dphys-swapfile を再起動


感想

リンクに物凄く時間がかかってしまうので swap を増やすのは最後の手段なんでしょうけど... メモリ512MByte の raspi が欲しい気も...