Spreseneseの独自Arduinoパッケージを作るときの注意点

**Spresense**は、**Arduino**環境でも使えて、SDKになれていない人には触りやすいですよね？
でも、公式からリリースされた機能で固定されたパッケージをでの運用になるので、ちょっと変わったことをやろうとした場合、独自のパッケージを作る必要があります。

この**独自パッケージの作り方**も、実は、こちらに載っています。

https://developer.sony.com/spresense/development-guides/arduino_set_up_ja.html#_spresense_arduino_board_package_%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%81%AE%E4%BD%9C%E6%88%90

これに従って独自に、コード修正やKernelのコンフィグレーションを変更して、パッケージを作ることができ、このパッケージを他の人にも渡すことができます。

ただ、この時、コンフィグレーションで、新しい機能を追加した場合、SDKのライブラリのアーカイブに、新しい **lib???.a** が追加されることがあります。

このライブラリは、Arduinoのローカルパッケージをインストールした場合、

*C:\Users\（ユーザ名）\AppData\Local\Arduino15\packages\SPRESENSE_（パッケージ名）\tools\spresense-sdk\（バージョン）\spresense\release\nuttx\libs`

の下などに追加されますが、そのままではリンクされず、リンクエラーになってしまいます。

これは、Arduino の elfのリンクが、実は、このファイルに従っているためで、

`spresense-arduino-compatible/Arduino15/packages/SPRESENSE/hardware/spresense/1.0.0/boards.txt`

これに、必要なアーカイブを追記する必要があります。

```
spresense.menu.Core.Main.build.libs="{build.libpath}/libapps.a" "{build.libpath}/libarch.a" "{build.libpath}/libarm_cortexM4lf_math.a" "{build.libpath}/libaudio.a" "{build.libpath}/libbinfmt.a" "{build.libpath}/libboard.a" "{build.libpath}/libboards.a" "{build.libpath}/libc.a" "{build.libpath}/libcmsis_nn.a" "{build.libpath}/libdrivers.a" "{build.libpath}/libfs.a" "{build.libpath}/libmm.a" "{build.libpath}/libnet.a" "{build.libpath}/libnnablart.a" "{build.libpath}/libsched.a" "{build.libpath}/libsslutils.a" "{build.libpath}/libxx.a" "{build.libpath}/libmossfw.a" "{build.libpath}/libnrf52.a" "{build.libpath}/libuecc.a" "{build.libpath}/（新しいライブラリ）"
spresense.menu.Core.Sub1.build.libs="{build.libpath}/libapps.a" "{build.libpath}/libarch.a" "{build.libpath}/libarm_cortexM4lf_math.a" "{build.libpath}/libbinfmt.a" "{build.libpath}/libboard.a" "{build.libpath}/libboards.a" "{build.libpath}/libc.a" "{build.libpath}/libcmsis_nn.a" "{build.libpath}/libdrivers.a" "{build.libpath}/libfs.a" "{build.libpath}/libmm.a" "{build.libpath}/libsched.a" "{build.libpath}/libxx.a" "{build.libpath}/（新しいライブラリ）"
spresense.menu.Core.Sub2.build.libs="{build.libpath}/libapps.a" "{build.libpath}/libarch.a" "{build.libpath}/libarm_cortexM4lf_math.a" "{build.libpath}/libbinfmt.a" "{build.libpath}/libboard.a" "{build.libpath}/libboards.a" "{build.libpath}/libc.a" "{build.libpath}/libcmsis_nn.a" "{build.libpath}/libdrivers.a" "{build.libpath}/libfs.a" "{build.libpath}/libmm.a" "{build.libpath}/libsched.a" "{build.libpath}/libxx.a" "{build.libpath}/（新しいライブラリ）"
spresense.menu.Core.Sub3.build.libs="{build.libpath}/libapps.a" "{build.libpath}/libarch.a" "{build.libpath}/libarm_cortexM4lf_math.a" "{build.libpath}/libbinfmt.a" "{build.libpath}/libboard.a" "{build.libpath}/libboards.a" "{build.libpath}/libc.a" "{build.libpath}/libcmsis_nn.a" "{build.libpath}/libdrivers.a" "{build.libpath}/libfs.a" "{build.libpath}/libmm.a" "{build.libpath}/libsched.a" "{build.libpath}/libxx.a" "{build.libpath}/（新しいライブラリ）”
spresense.menu.Core.Sub4.build.libs="{build.libpath}/libapps.a" "{build.libpath}/libarch.a" "{build.libpath}/libarm_cortexM4lf_math.a" "{build.libpath}/libbinfmt.a" "{build.libpath}/libboard.a" "{build.libpath}/libboards.a" "{build.libpath}/libc.a" "{build.libpath}/libcmsis_nn.a" "{build.libpath}/libdrivers.a" "{build.libpath}/libfs.a" "{build.libpath}/libmm.a" "{build.libpath}/libsched.a" "{build.libpath}/libxx.a" "{build.libpath}/（新しいライブラリ）"
spresense.menu.Core.Sub5.build.libs="{build.libpath}/libapps.a" "{build.libpath}/libarch.a" "{build.libpath}/libarm_cortexM4lf_math.a" "{build.libpath}/libbinfmt.a" "{build.libpath}/libboard.a" "{build.libpath}/libboards.a" "{build.libpath}/libc.a" "{build.libpath}/libcmsis_nn.a" "{build.libpath}/libdrivers.a" "{build.libpath}/libfs.a" "{build.libpath}/libmm.a" "{build.libpath}/libsched.a" "{build.libpath}/libxx.a" "{build.libpath}/（新しいライブラリ）"
```


このように追記することで、ようやく、buildができるようになります。



この記事は、以下のブログからの転載です。
http://spresense.livedoor.blog/archives/35790109.html