2011-01-04 25 views
13

Pakuję natywny interfejs API na Androida przez NDK.Nie można znaleźć plików nagłówków - Android NDK

Ale podczas budowania nie znajduje plików nagłówkowych.

Mam następującą strukturę.

projekt/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) 

projekt/JNI/prereqs/

Android.mk (używane aby wywołać wszystkie subdirs pliki 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) 

I jest to folder% na każdym folderze% lib.

Podczas korzystania NDK-build dostaję „/home/marcos/dev/workspace/rmsdk.native.wraper/jni/DelegateDRMProcessorClient.h:18:20: Błąd: dp_all.h: Nie ma takiego pliku lub katalogu "

Ktoś wie, w jaki sposób dołączyć nagłówek do kompilatora?

+1

jaka jest ścieżka, gdzie znajduje się dp_all.h? –

+0

project/jni/prereqs/dp/include –

+0

@Marcos, czy mógłbybyś podzielić się tym, jak zaimportowałeś statyczne biblioteki "adept cryptopenssl dp expat fonts hobbes jpeg mschema png t3 xml zlib" ?? Chcę zaimportować niektóre z tych bibliotek, ale mam problemy. Na przykład, w jaki sposób skompilowałeś plik zlib, aby zaimportować go tutaj? – Tiago

Odpowiedz

15

go rozwiązać, uzyskanie wszystkich nagłówków w folderze i tym następujący wiersz w Android.mk

LOCAL_C_INCLUDES := $(LOCAL_PATH)/include-all 

To działa, ale nie wygląda na to najlepszym rozwiązaniem.

12

Jestem trochę późno na tej imprezie, ale wpadł na ten sam problem i może mieć odpowiedź na Twój komentarz: „To działa, ale nie wygląda na to najlepszym podejściem”

Nie; sa próbka w NDK o nazwie "module-exports" Pokazuje, w jaki sposób skonstruować plik Android.mk, który respektuje pliki nagłówkowe znajdujące się w ich odpowiednich katalogach, a nie wszystkie są umieszczane w jednym katalogu.

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) 
+0

cóż, działa z jednym plikiem Android.mk, odpowiedź rekursywna na inne pytanie z mojego własnego –

+1

Czy możesz podać link do odpowiedzi, o której wspomniałeś? –

3

lat później ...

wyeksportować katalogu include zamiast pojedynczych plików, używam następujące:

LOCAL_EXPORT_C_INCLUDE_DIRS := $(MY_DIRECTORY_PATH) 

Na przykład dla powyższej kwestii eksportu dla „foo "będzie wyglądać następująco:

LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/foo 
+0

"LOCAL_EXPORT_C_INCLUDES: =" – DevByStarlight

+0

Dziękuję Starlight. Wygląda na to, że reguły kompilacji zostały zaktualizowane. Zawsze możesz zmienić odpowiedź, ponieważ przetestowałeś nowszą regułę. _DIRS pracował dla mnie w tym czasie. –

1

Dla wygody nowych ludzi, po prostu chcę dodać ten ruch do całego nagłówka pliki w folderze, do którego odwołuje się LOCAL_C_INCLUDES: = $ (LOCAL_PATH), a następnie zapisz android.mk i uruchom ponownie środowisko Eclipse. Po wypróbowaniu wszystkich powyższych rozwiązań, to zadziałało dla mnie.

+0

Ten problem opisuje przypadek, w którym masz nagłówki w wielu podfolderach, możesz dodać wszystkie .h w jednym folderze, a import będzie działać tak samo. –

Powiązane problemy