Spresense SDKに、Static Library (.a)を追加する方法は

投稿者: Anonymous

元はCで書かれた、Static Library (.a)とヘッダーファイルがあり、
これをSpresense SDKで使いたいです
どうすれば良いでしょうか?

■(例) Static Library (.a)とヘッダーファイル
header_file1.h
header_file2.h
:
header_file5.h
myStatic_lib.a   ※ Cortex-M4 hard_float

Spresense SDKに追加する場所は、
 hellow_worldサンプル内に追加、
 Nuttx側のどこか
 または、その他
かと思っております

Makefileを編集する力があればできるのかも。。

hello
┝ .built
┝ .depend
┝ hello_main.c
┝ hello_main.o
┝ make.deps
┝ make.dep
┗ Makefile

■make.depファイル
hello_main.o: hello_main.c
/Users/username/spresense/sdk/bsp/include/sdk/config.h
 :
/Users/username/spresense/nuttx/include/nuttx/addrenv.h
インクルードファイルはこのあたりに追加?

■Makefile
-include $(TOPDIR)/Make.defs
-include $(SDKDIR)/Make.defs

CONFIG_HELLO_PRIORITY ?= SCHED_PRIORITY_DEFAULT
CONFIG_HELLO_STACKSIZE ?= 2048

APPNAME = hello
PRIORITY = $(CONFIG_HELLO_PRIORITY)
STACKSIZE = $(CONFIG_HELLO_STACKSIZE)

MAINSRC = hello_main.c
ASRCS =
CSRCS = $(filter-out $(MAINSRC),$(wildcard *.c) $(wildcard /.c))
CXXSRCS = $(wildcard *.cpp) $(wildcard /.cpp) $(wildcard *.cxx) $(wildcard /.cxx)

CFLAGS += $(foreach inc,$(wildcard ..//include),-I$(inc))
CXXFLAGS += $(foreach inc,$(wildcard ../
/include),-I$(inc))

CONFIG_HELLO_PROGNAME ?= hello$(EXEEXT)
PROGNAME = $(CONFIG_HELLO_PROGNAME)

include $(APPDIR)/Application.mk

自分にはちょっとハードルが高そう。。

解決

コンパイル済みのライブラリを取り込むときは externals に入れるのが良いと思います。

externals フォルダ以下に xxx というディレクトリを新規作成して、そこにライブラリ(libxxx.a)とヘッダファイル(xxx.h)を置きます。xxx は適当に読み替えてください。

spresense/externals/xxx
|– Kconfig
|– LibIncludes.mk
|– LibTarget.mk
|– libxxx.a
`– xxx.h

Kconfig, LibIncludes.mk, LibTarget.mk ファイルを用意して、それぞれ以下のように書きます。

■ Kconfig

config EXTERNALS_XXX
    bool "XXX Library"
    default n

■ LibIncludes.mk

ifeq ($(CONFIG_EXTERNALS_XXX),y)
CFLAGS   += ${shell $(INCDIR) $(INCDIROPT) "$(CC)" "$(SDKDIR)/../externals/xxx"}
CXXFLAGS += ${shell $(INCDIR) $(INCDIROPT) "$(CC)" "$(SDKDIR)/../externals/xxx"}
endif

■ LibTarget.mk

ifeq ($(CONFIG_EXTERNALS_XXX),y)
EXTLIBS += lib$(DELIM)libxxx$(LIBEXT)
XXXDIRS += $(EXTERNAL_DIR)$(DELIM)xxx
endif

lib$(DELIM)libxxx$(LIBEXT): $(XXXDIRS)$(DELIM)libxxx$(LIBEXT)
    $(Q) install $< [email protected]

SDK Configuration で Externals -> XXX Library を選択して CONFIG_EXTERNALS_XXX を有効にしておきます。そうすれば、例えば、hello_main.c へ #include <xxx.h> を追加して libxxx.a の関数を呼び出すことが可能になります。

これら externals/mqtt を参考にしてみました。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *