2012-04-10 12 views
7

Questo è il mio file java per il quale volevo generare un file di intestazione utilizzando javah per un'applicazione Android opencv.inclusione non risolta nell'intestazione java in JNI

package com.hosa; 

public class edgejava{ 
static{ 
    System.loadLibrary("edgejava"); 
} 
public native int main(``); 
} 

Il file di intestazione generato è il seguente.

/* DO NOT EDIT THIS FILE - it is machine generated */ 
#include <jni.h> 
/* Header for class com_hosa_edgejava */ 

#ifndef _Included_com_hosa_edgejava 
#define _Included_com_hosa_edgejava 
#ifdef __cplusplus 
extern "C" { 
#endif 
/* 
* Class:  com_hosa_edgejava 
* Method: main 
* Signature:()I 
*/ 
JNIEXPORT jint JNICALL Java_com_hosa_edgejava_main 
(JNIEnv *, jobject); 

#ifdef __cplusplus 
} 
#endif 
#endif 

l'eclissi indica che l'inclusione di jni.h nel file di intestazione non è risolta. quali sono i passi da fare per risolvere questo ????

saluti, srijith

+3

Non ho familiarità con eclipse, ma la directory '$ JRE_HOME/include' deve essere inclusa nell'elenco delle directory di inclusione. – hmjd

risposta

26

Sto avendo problemi con questo pure in modo per tutti coloro che inciampa su questo ...

ho risolto il problema JNI da Eclipse - si può avere già fatto il passaggio 1 o qualcosa di simile

  1. File -> Nuovo -> Altri-> C++> Converti in ++ Progetto C

  2. fare clic destro sul Proj ect Head -> Proprietà -> C++ Generale -> Percorsi E Simboli

  3. aggiungere un percorso simile a questo sotto GNU e GNUC++ voci di lingua

    /NDK/piattaforme/Android-9/arch-arm/usr/includono

    tuo percorso sarà diverso a seconda di come si è messa a punto, che il numero piattaforma ecc

    Una volta fatto poi ricostruire gli indici quando viene richiesto

  4. chiudere il progetto, riaprirlo, quindi c lean-build (o potrebbe accadere immediatamente)

Nel mio caso il JNI.h è stato poi trovato, ma il MEnv ecc erano ancora sconosciuto anche se sono nel file JNI.h.

anche notare per chiunque abbia questo problema che non ti impedisce di costruire, non vi resta che chiudere i file incriminati, quindi aprire e chiudere il progetto per sbarazzarsi degli errori (che dolore)

UPDATE: FISSO!

Nell'edizione di quanto sopra in Indigo effettuare le seguenti operazioni dal menu/finestra

Finestra-> Preferenze> C/C++ -> Indice controllare l ' "Indice intestazioni non utilizzate" reindex/costruire, se necessario

Potrebbe anche essere necessario aggiungere "/NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/lib/gcc/arm-linux-androideabi/4.4.3/include" sopra l'inclusione che ho citato sopra alle voci della lingua.

Tutti i simboli sono ora riconosciuti - Spero che questo aiuti qualcuno che mi sta facendo impazzire.

+0

Mac, Luna, non funziona ... –

+0

Finestra-> Preferenze-> C/C++ -> Indice controlla l'indice "Intestazioni non utilizzate" reindex/build se necessario .. Ha funzionato per me. –

-3

Nel mio caso, ho appena chiuso e aperto il progetto, poi la gli errori sono scomparsi.

1

FISSO!

Aggiungi al Application.mk:
APP_STL := gnustl_shared

Vai a Properties -> C/C++ General -> Preprocessor Include-> Entries -> Add -> Include Directory -> File System Path, e selezionare il percorso del include come:

${NDK_ROOT}\platforms\android-21\arch-arm\usr\include 
${NDK_ROOT}\sources\cxx-stl\gnu-libstdc++\4.8\libs\armeabi-v7a\include 
${NDK_ROOT}\sources\cxx-stl\gnu-libstdc++\4.8\include 
${NDK_ROOT}\toolchains\arm-linux-androideabi-4.8\prebuilt\darwin-x86_64\lib\gcc\arm-linux-androideabi\4.8\include 

!!! Seleziona la casella di controllo "Contains system headers" per ogni percorso incluso. !!!

Vai a Properties -> C/C++ General -> Preprocessor Include-> Providers -> Check CDT GCC Built-in Compiler Settings -> OK

Pulisci e ricostruisci il tuo progetto.

+0

Funziona su Mac con Luna. –

Problemi correlati