2021.11.10現在 → M5Stack + ArduinoIDE 環境での AquesTalk ESP32 利用時におけるリンカーエラー対策(とりあえず動作させたい人向け)


はじめに

初投稿の覚書。
推奨されている方法は二の次で、とりあえず動作させたい人向けの記事。

現状、2種類の問題を確認。

1)リンク時、AquesTalk のコンパイル済みバイナリとリンクできないエラー(undefined reference to `CAqTkPicoF_SetKoe' 等)

 対策:下記のURLの通り。

 異なるところは、

 ・環境設定
 ・ボードマネージャ追加設定
 ・platform.txt のパス

2)リンカーが動作しない(cannot open linker script file esp32.rom.redefined.ld: そのようなファイルやディレクトリはありません)

 対策: ボードマネージャでインストールするバージョンを古めのバージョンにする。

環境設定

追加のボードマネージャURLに M5Stack のURLを追加。

https://www.adafruit.com/package_adafruit_index.json,https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/arduino/package_m5stack_index.json

ボードマネージャ

M5Stackを追加。
注意点は2.0.0等の最新版は使わないこと(理由は不明……)。
1.0.9を使ってみたら成功した(1.0.6でも動作確認済み)。

platform.txt

編集対象の platform.txt の path は、Linux版では、

~/.arduino15/packages/m5stack/hardware/esp32/1.0.9/platform.txt 

となる。

編集内容は、以下の2点。

1)compiler.libraries.ldflags を空白に設定(なければ追加)

compiler.libraries.ldflags=

2)recipe.c.combine.pattern を以下に修正

recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" {compiler.c.elf.flags} {compiler.c.elf.extra_flags} -Wl,--start-group {object_files} "{archive_file_path}" {compiler.c.elf.libs} {compiler.libraries.ldflags} -Wl,--end-group -Wl,-EL -o "{build.path}/{build.project_name}.elf"

なお、platform.txt を直接編集せずに、上記内容を platform.local.txt に記述して、platform.txt と同じディレクトリに保存するのが推奨らしい。

platform.local.txt
compiler.libraries.ldflags=
recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" {compiler.c.elf.flags} {compiler.c.elf.extra_flags} -Wl,--start-group {object_files} "{archive_file_path}" {compiler.c.elf.libs} {compiler.libraries.ldflags} -Wl,--end-group -Wl,-EL -o "{build.path}/{build.project_name}.elf"

これも、動作確認済み。


以上、取り急ぎご報告まで。