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

我在 Windows 上使用了 MinGW。将“;C:\MinGW\bin\”添加到路径环境变量后,我可以使用以下命令从 Windows 命令提示符运行 gcc.exe。

jni.h 文件位于 java home 包含文件夹中。您可以使用 JAVA_HOME 环境变量或明确指定。

 gcc -c -I"C:\Program Files\Java\jdk1.6.0_26\include" -I"C:\Program Files\Java\jdk1.6.0_26\include\win32" "S:\Accessibility\tools\src\test\java\com\accessibility\HelloWorld.c"

这创建了一个 HelloWorld.o 文件。

于 2013-08-09T21:41:46.513 回答
1

我猜你还没有将 jni 目录添加到包含目录列表中,详情请查看http://social.msdn.microsoft.com/forums/is/vclanguage/thread/cd7f2d1d-f750-494c-a3b2-7d4186cfe51c

于 2012-06-22T10:44:51.670 回答
1

假设你安装了一个 JDK,你需要通知 gcc JNI 的包含目录:

-I$JAVA_HOME/../include

where$JAVA_HOME应该设置为 Javabin目录的父目录(/usr/lib/jvm/java-6-openjdk-amd64/jre例如在我的机器上)。如果没有设置,那么,如果你只是找到你的jni.h标题所在的文件夹,它会更简单。

我同意从 JNI 开始学习 Java 是一项艰巨的任务,但我尊重你的决定。如果你喜欢时尚书籍,我会推荐Core Java Volume ICore Java Volume II。特别是在后者的末尾,您可以找到对本机方法的相当详尽的介绍。

于 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 回答