2011-01-04 6 views
13

J'emballe une API native à Android par NDK. Mais lors de la construction, il ne trouve pas les fichiers d'en-tête.Impossible de trouver les fichiers d'en-tête - Android NDK

J'ai la structure suivante.

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

projet/JNI/prereqs/

Android.mk (appelions tous les fichiers subdirs Les Android.mk)

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

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

Et il y a un dossier inclure sur chaque dossier% lib%.

Lors de l'utilisation NDK-build-je obtenir un « /home/marcos/dev/workspace/rmsdk.native.wraper/jni/DelegateDRMProcessorClient.h:18:20: Erreur: dp_all.h: Aucun fichier ou répertoire "

Quelqu'un sait comment inclure ces en-tête pour être disponible pour le compilateur?

+1

quel est le chemin où se trouve dp_all.h? –

+0

projet/jni/prereqs/dp/include –

+0

@ Marcos, cela vous dérangerait de partager comment vous avez importé les bibliothèques statiques "adepte cryptopenssl dp expat fonts hobbes jpeg mschema png t3 xml zlib" ?? Je veux importer certaines de ces bibliothèques mais j'ai du mal. Par exemple, comment avez-vous compilé zlib pour l'importer ici? – Tiago

Répondre

15

je l'ai résolu, obtenir tous les en-têtes dans un dossier et incluant la ligne suivante dans le Android.mk

LOCAL_C_INCLUDES := $(LOCAL_PATH)/include-all 

Cela fonctionne, mais ne considère pas comme la meilleure approche.

12

Je suis un peu en retard à ce parti, mais a couru dans le même problème et peut-être avoir une réponse à votre commentaire: « Cela fonctionne, mais pas ressemble à la meilleure approche »

Il; sa échantillon dans le NDK appelé "module-exports" Il montre comment construire un fichier Android.mk qui respecte les fichiers d'en-tête vivant dans leurs répertoires appropriés et qui ne sont pas tous déversés dans un seul répertoire d'inclusion.

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

Eh bien, il fonctionne avec un seul fichier Android.mk, récursivement a été répondu à une autre question de mon propre –

+1

Pouvez-vous inclure un lien vers la réponse que vous avez mentionnée? –

3

ans plus tard ...

Pour exporter le répertoire include au lieu de fichiers individuels, j'utilise les éléments suivants:

LOCAL_EXPORT_C_INCLUDE_DIRS := $(MY_DIRECTORY_PATH) 

Par exemple, pour la question ci-dessus pour l'exportation « foo "ressemblerait à:

LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/foo 
+0

"LOCAL_EXPORT_C_INCLUDES: =" – DevByStarlight

+0

Merci Starlight. Il semble que les règles de construction ont été mises à jour. Vous pouvez toujours changer la réponse depuis que vous avez testé la nouvelle règle. _DIRS a travaillé pour moi à l'époque. –

1

Pour le confort des personnes, je veux juste ajouter que déplacer tout votre en-tête fichiers dans le dossier qui est référencé par LOCAL_C_INCLUDES: = $ (LOCAL_PATH), puis enregistrez android.mk et redémarrez eclipse. Après avoir essayé toutes les solutions ci-dessus, cela a fonctionné pour moi.

+0

Le problème ici décrit le cas sur lequel vous avez des en-têtes à travers de nombreux sous-dossiers, vous pouvez ajouter tous. H dans un dossier et l'importation fonctionnera comme en effet. –

Questions connexes