web-dev-qa-db-ja.com

ヘッダーファイルが見つかりません-Android NDK

ネイティブAPIをNDKによってAndroidにラップしています。

しかし、ビルドするときにヘッダーファイルが見つかりません。

私は次のような構造をしています。

プロジェクト/ jni

Android.mk

LOCAL_PATH := $(call my-dir)

include $(call all-subdir-makefiles)

LOCAL_PATH :=/home/marcos/dev/workspace/rmsdk.native.wraper/jni

include $(CLEAR_VARS)

LOCAL_LDLIBS := -llog
LOCAL_MODULE    := ndk1
LOCAL_SRC_FILES := native.c DelegateDRMProcessorClient.cpp
LOCAL_STATIC_LIBRARY := adept cryptopenssl dp expat fonts hobbes jpeg mschema png t3 xml zlib

include $(BUILD_SHARED_LIBRARY)

project/jni/prereqs /

Android.mk(すべてのサブディレクトリAndroid.mkファイルを呼び出すために使用されます)

LOCAL_PATH := $(call my-dir)
include $(call all-subdir-makefiles)
include $(CLEAR_VARS)

project/jni/prereqs /%lib%/

Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    :=dp
LOCAL_SRC_FILES :=libdp.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include

include $(PREBUILT_STATIC_LIBRARY)

また、各%lib%フォルダーにはincludeフォルダーがあります。

Ndk-buildを使用すると、「/ home/marcos/dev/workspace/rmsdk.native.wraper/jni/DelegateDRMProcessorClient.h:18:20:エラー:dp_all.h:そのようなファイルまたはディレクトリはありません」というメッセージが表示されます。

コンパイラが利用できるようにこれらのヘッダーを含める方法を知っている人はいますか?

13

私はそれを解決し、フォルダー内のすべてのヘッダーを取得し、Android.mkに次の行を含めます

LOCAL_C_INCLUDES := $(LOCAL_PATH)/include-all

これは機能しますが、最善のアプローチとは思えません。

15

私はこのパーティーに少し遅れていますが、同じ問題に遭遇し、あなたのコメントに対する答えがあるかもしれません:「これはうまくいきますが、最善のアプローチのようには見えません」

「module-exports」と呼ばれるNDKのサンプルがあります。これは、適切なディレクトリに存在し、すべてが単一のインクルードディレクトリにダンプされるわけではないヘッダーファイルを尊重する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)
12
slushduck

数年後...

個々のファイルの代わりにインクルードディレクトリをエクスポートするには、次を使用します。

LOCAL_EXPORT_C_INCLUDE_DIRS  := $(MY_DIRECTORY_PATH)

たとえば、上記の質問の場合、「foo」のエクスポートは次のようになります。

LOCAL_EXPORT_C_INCLUDE_DIRS  := $(LOCAL_PATH)/foo
4
Keo Malope

新しい人の便宜のために、すべてのヘッダーファイルをLOCAL_C_INCLUDES:= $(LOCAL_PATH)で参照されるフォルダーに移動し、Android.mkを保存してEclipseを再起動することを追加したいと思います。上記のすべての解決策を試した後、それは私のために働いた。

1
bisma