何を含めるかを指示するのはライブラリの責任であるため、一時的に問題を解決する可能性があるにもかかわらず、LOCAL_C_INCLUDES
他の誰かによって書かれたインクルード ファイルを指定するために使用することは ( Gavin の回答で示唆されているように)、保守性の観点からは良い考えではありません。
問題の 1 つは、Android.mk
ファイルがlibtest
正しく書き込まれていないことです。ヘッダー ファイルをエクスポートする場合は、追加LOCAL_EXPORT_C_INCLUDES := /path/to/include-dir
する必要があります。
以下に例を示します (から引用$NDK_ROOT/samples/module-exports/jni/Android.mk
)。
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := foo
LOCAL_SRC_FILES := foo/foo.c
LOCAL_CFLAGS := -DFOO=2
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/foo
LOCAL_EXPORT_CFLAGS := -DFOO=1
LOCAL_EXPORT_LDLIBS := -llog
include $(BUILD_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := bar
LOCAL_SRC_FILES := bar/bar.c
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/bar
LOCAL_STATIC_LIBRARIES := foo
include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := zoo
LOCAL_SRC_FILES := zoo/zoo.c
LOCAL_SHARED_LIBRARIES := bar
include $(BUILD_SHARED_LIBRARY)
ここで、最初のライブラリはfoo
. これはスタティック ライブラリとしてビルドされます (「参考文献」を参照include $(BUILD_STATIC_LIBRARY)
)。以下を使用してヘッダー ディレクトリをエクスポートします。
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/foo
2 番目のライブラリはbar
、共有ライブラリです (「 」を参照LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/bar
)。参照foo
する場合:
LOCAL_STATIC_LIBRARIES := foo
のヘッダーが に指定されているfoo
かのように検索されます。独自のヘッダー ディレクトリもエクスポートすることに注意してください。-I$LOCAL_PATH/foo
gcc
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/bar
3 つ目のライブラリはzoo
、共有ライブラリです。ライブラリを参照しbar
ます。これは、共有ライブラリに別の共有ライブラリを問題なく含めることができることを示しています。
これで問題が解決しない場合は、さらに構成を含めてください。