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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*