fawkes-robotino がFedora on raspberry piで動かない理由
fawkes-robotino をFedora on raspberry pi でmake すると,
fawkes-robotino/fawkes はコンパイルできるけど,
fawkes-robotino-src 以下,コンパイラがエラーを出します.
※コンパイルエラーではなく,コンパイラ「が」エラーになります.
[pi@pi src]$ make --> Entering sub-directory src/libs --> Entering sub-directory src/libs/interfaces [C++] src/libs/interfaces/ZoneInterface.cpp *** Error in `/usr/bin/gcc': double free or corruption (top): 0x01559450 *** ======= Backtrace: =========
↑こんな感じ.
ところが,同じファイルをfawkes の下に移動したら発生しなくなります.
どちらも同じ条件でコンパイルしているはずなのになぁ と思って,Makefile を眺めてみたら,
fawkes-robotino の fawkes の中のBASEDIR は,fawkes-robotino/fawkes を指しているのに対して,
fawkes-robotino の src の中のBASEDIR は,fawkes-robotino/ を指していました.
実は,設定ファイルは,fawkes-robotino/fawkes/etc の下と,fawkes-robotino/etc の下の二箇所,別々のものがあったようです.
fawkes-robotino/src の下のMakefile に対して,
BASEDIR = ../../fawkes
みたいに,fawkes側の設定ファイルを参照するように変更したら,
先程のgcc の double free or corruption エラーはでなくなり,コンパイルできました.
※上の変更は,元に戻しましょう.
fawkes-robotino の etc の下のconfig.mk は,
hostname に対して,コンパイルオプションを設定した上で,
fawkes-robotino/fawkes の方のconfig.mk を
呼び出している模様.
だから,本来は,ほぼ同じ動作をするはずなのですが,
BASEDIR が指す場所が,異なります.
で, fawkes-robotino/src の方のBASEDIR も同じ場所を指すには,
BUILDSYSDIR := $(abspath $(TOP_BASEDIR)/fawkes/etc/buildsys) SECONDARY_BUILDSYSDIR := $(abspath $(TOP_BASEDIR)/etc/buildsys) ifneq ($(notdir $(BASEDIR)/fawkes),) BASEDIR := $(BASEDIR)/fawkes endif
と変更すれば,実現できます.
BUILDSYSDIR とSECONDARY_BUILDSYSDIR の代入は,= ではなく,:= にします.
Makefile で代入の扱いより,
利用時に変数を評価するか,代入時に評価するかの違いです.
ただし,gazeboの中でエラーがでます.
というのも,なぜかgazebo 以下のMakefile だけは,(BASDIR)/fawkes を参照するようになっているからです.
include $(BASEDIR)/fawkes/src/plugins/gazebo/gazebo.mk
の部分を
include $(BASEDIR)/src/plugins/gazebo/gazebo.mk
へと変更します.
あと,gazeim/gazsim-light-front のMakefile にて,
-mno-avx がエラーを出します.
gcc: error: unrecognized command line option ‘-mno-avx’
で,よくわからないけど,-mno-avx オプションは,外します.
CFLAGS += $(CFLAGS_TF) # -mno-avx
コメントを残す