4

私はJavaの学習が初めてで、初めてJNIを始めたいと思っています。そして、私は Cygwin を使用しており、次のように .java (Helloworld.java) 拡張子を持つファイルを作成しました。

class HelloWorld {
     private native void print();
     public static void main(String[] args) {
         new HelloWorld().print();
     }
     static {
         System.loadLibrary("HelloWorld");
     }
 }

次に、コマンド ライン ( javac Helloworld.java) を使用してファイルをコンパイルし、コマンドを使用してネイティブ ヘッダー ファイルを作成します。javah –jni Helloworld 次に、次のように C ファイルを作成して実装します。

#include <jni.h>
 #include <stdio.h>
 #include "HelloWorld.h"

 JNIEXPORT void JNICALL 
 Java_HelloWorld_print(JNIEnv *env, jobject obj)
 {
     printf("Hello World!\n");
     return;
 }

その後、コマンドを実行している間

 Gcc –wall –g Helloworld.c –o hello 

Cygwin のコマンド プロンプト ラインにメッセージを表示する

 helloworld.c:1:17: fatal error: jni.h: No such file or directory
 compilation terminated.

実行方法とファイルを実行するためのパスを設定する手順は? どなたか助けてください。ありがとう。

4

4 に答える 4

1

インクルードディレクトリリストにjniディレクトリを追加していないと思います。詳細については、 http: //social.msdn.microsoft.com/forums/is/vclanguage/thread/cd7f2d1d-f750-494c-a3b2-7d4186cfe51cを確認してください。

于 2012-06-22T10:44:51.670 に答える
1

JDKをインストールしたとすると、JNIのincludesディレクトリについてgccに通知する必要があります。

-I$JAVA_HOME/../include

ここ$JAVA_HOMEで、Javaディレクトリの親ディレクトリとして設定する必要がありますbin/usr/lib/jvm/java-6-openjdk-amd64/jreたとえば、私のマシン上)。jni.h設定されていない場合は、ヘッダーが存在するフォルダーを見つけるだけの方が簡単です。

JNIからJavaを学び始めるのは大変な作業であることに同意しますが、私はあなたの決定を尊重します。あなたが本を作るなら、私はCore JavaVolumeICoreJavaVolumeIIを提案します。特に後者の終わりには、ネイティブメソッドのかなり網羅的なカバレッジを見つけることができます。

于 2012-06-22T10:44:58.633 に答える
0

Visual Studio がマシンに正常にインストールされている場合は、Visual Studio開発者コマンド プロンプトを使用してコンパイルできます。

X86 (32 ビット)バージョンの dllを生成するには、「VS20XX x86 Native Tools Command Prompt」を使用します。

X64 (64 ビット)バージョンの dllを生成するには、「VS20XX x64 Native Tools Command Prompt」を使用します。

VS20XXのXXは、Visual Studio バージョン 2008 以降です。

cl.exe /LD /EHsc /I "%JAVA_HOME%\include" /I "%JAVA_HOME%\include\win32" TestJNIString.c

注: JAVA_HOME 変数が環境変数に設定されていることを確認してください。

于 2017-03-08T05:32:15.800 に答える