2012-04-10 20 views
7

To jest mój plik java, dla którego chciałem wygenerować plik nagłówka za pomocą javah dla aplikacji android opencv.nierozwiązane włączenie w nagłówku java w JNI

package com.hosa; 

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

Wygenerowany plik nagłówkowy wygląda jak poniżej.

/* 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 

Zaćmienie wskazuje, że włączenie pliku jni.h do pliku nagłówkowego jest nierozwiązane. Jakie są kroki, które należy podjąć, aby rozwiązać ten problem?

pozdrowienia, srijith

+3

Nie jestem zaznajomiony z zaćmieniem, ale katalog '$ JRE_HOME/include' musi znajdować się na liście katalogów włączających. – hmjd

Odpowiedz

26

Mam problemy z tym, jak również tak, że dla każdego, natyka się na ten ...

I rozwiązać problem JNI od Eclipse - można już zrobić krok 1 lub coś podobnego

  1. File -> New -> Inne-> C++> Convert to C++ projektu

  2. prawym przyciskiem myszy na Proj ect Head -> Właściwości -> C++ Ogólne -> Ścieżki i symbole

  3. dodać ścieżkę podobny do tego na mocy GNU i GNUC++ Językowych Wpisy

    /NDK/Platformy/Android-9/arch-arm/usr/obejmują

    Twoja ścieżka będzie inny zależny od tego, jak są ustawione, który peron numer itp

    gdy to zrobisz potem odbudować indeksy gdy monituje

  4. zamknąć swój projekt, otworzyć ją ponownie, następnie c chudego build (lub może się zdarzyć, natychmiast)

w moim przypadku JNI.h następnie znaleźć ALE JNIEnv itd. były nadal nierozpoznane nawet jeśli są one w pliku JNI.h.

również pamiętać, dla każdego posiadającego ten problem to przyzwyczajenie powstrzymać od budowy, wystarczy zamknąć pliki naruszające następnie otworzyć i zamknąć swój projekt, aby pozbyć się błędów (co za ból)

UPDATE: NAPRAWIONY!

W wydaniu z powyższymi w Indigo wykonaj następujące czynności z menu/dialogowym

Okno-> Preferencje-> C/C++ -> Indeks sprawdzić "Index Niewykorzystane Nagłówki" reindex/zbudować razie potrzeby

Może być również konieczne dodanie "/NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/lib/gcc/arm-linux-androideabi/4.4.3/include" powyżej tego, o czym wspomniałem powyżej do wpisów językowych.

Wszystkie symbole są teraz rozpoznawane - Mam nadzieję, że to pomaga komuś, kto doprowadzał mnie do szału.

+0

Mac, Luna, nie działa ... –

+0

Okno-> Preferencje-> C/C++ -> Sprawdź indeks "Indeks nieużywanych nagłówków" reindeksuj/twórz w razie potrzeby. Pracowałem dla mnie. –

-3

w moim przypadku, po prostu zamknięte i otwórz projekt, a następnie błędy zniknęły.

1

NAPRAWIONO!

Dodaj do Application.mk:
APP_STL := gnustl_shared

Przejdź do Properties -> C/C++ General -> Preprocessor Include-> Entries -> Add -> Include Directory -> File System Path i wybierz ścieżkę obejmuje jak:

${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 

!!! Zaznacz pole wyboru "Contains system headers" dla każdej dołączonej ścieżki. !!!
Idź do Properties -> C/C++ General -> Preprocessor Include-> Providers -> Check CDT GCC Built-in Compiler Settings -> OK

Oczyść i odbuduj swój projekt.

+0

Działa na komputerze Mac z Luna. –