7

これは、android opencv アプリケーションの javah を使用してヘッダー ファイルを生成したい私の Java ファイルです。

package com.hosa;

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

生成されたヘッダーファイルは以下のとおりです。

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

日食は、ヘッダー ファイルに jni.h が含まれていることが解決されていないことを指摘しています。これを解決するために取るべきステップは何ですか????

よろしく、 srijith

4

4 に答える 4

26

私もこれに問題を抱えているので、これに出くわした人のために...

私はEclipseからJNIの問題を解決しました - あなたはすでにステップ1または同様のものを行っているかもしれません

  1. ファイル -> 新規 -> その他 -> C++ > C++ プロジェクトに変換

  2. プロジェクト ヘッドを右クリック -> プロパティ -> C++ 一般 -> パスとシンボル

  3. GNU および GNUC++ 言語エントリの下に、これと同様のパスを追加します。

    /NDK/プラットフォーム/Android-9/arch-arm/usr/include

    パスは、セットアップ方法、プラットフォーム番号などによって異なります。

    完了したら、プロンプトが表示されたらインデックスを再構築します

  4. プロジェクトを閉じて、もう一度開いてから、クリーン ビルドします (または、すぐに実行される可能性があります)。

私の場合、JNI.hが見つかりましたが、JNI.hファイルにあるにもかかわらず、JNIEnvなどはまだ認識されていませんでした。

また、この問題を抱えている人は、ビルドを止めることはできません。問題のあるファイルを閉じてから、プロジェクトを開いて閉じて、エラーを取り除く必要があります (面倒です)。

更新: 修正済み!

上記の Indigo の編集では、メニュー/ダイアログから次の操作を行います

Window->Preferences->C/C++->Index 必要に応じて、"Index Unused Headers" reindex/build をチェックします

上記のインクルードの上に「/NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/lib/gcc/arm-linux-androideabi/4.4.3/include」を追加する必要がある場合もあります言語エントリに。

すべてのシンボルが認識されるようになりました。

于 2012-04-27T07:19:17.417 に答える
1

修繕!

に追加Application.mk:に
APP_STL := gnustl_shared

移動しProperties -> C/C++ General -> Preprocessor Include-> Entries -> Add -> Include Directory -> File System Path、次のようなインクルードのパスを選択します。

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

!!! "Contains system headers"含まれる各パスのチェックボックスをオンにします。!!! プロジェクトのクリーンアップと再構築に進みます

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

于 2014-12-09T14:03:05.550 に答える
0

Android JNIでも同じ問題がありました。プロジェクトをNDKソースのandroid jni.hのインクルードパスにポイントすることで修正しました ここからNDKをダウンロードする方法を参照してください: https://developer.android.com/tools/sdk/ndk/index.html

修正の詳細は次のとおりです。

Android ネイティブ サポートの追加 - 未解決の jni.h、android/log.h など

于 2014-04-28T20:21:46.270 に答える
-3

私の場合、プロジェクトを閉じて開くだけで、エラーは消えました。

于 2014-08-20T04:55:35.100 に答える