【问题标题】:Getting Started with JNI and C under WindowsWindows下JNI和C入门
【发布时间】:2012-06-22 09:56:53
【问题描述】:

我是 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.

如何运行以及设置执行文件路径的步骤是什么?请帮助我任何一个。谢谢。

【问题讨论】:

  • 看起来您要么没有为 C 安装 JNI 库,要么没有将它包含在包含路径中。
  • 恕我直言,鉴于您是 Java 新手,JNI 是您可能遇到的最糟糕的事情。我个人建议从 Java Learning Trail 开始,然后拿一本像 Head First Java 这样的好书。
  • 为什么用 jni4net 标记?

标签: java java-native-interface jni4net jnienv


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    -I$JAVA_HOME/../include
    

    其中$JAVA_HOME 应设置为Java bin 目录的父目录(例如我机器上的/usr/lib/jvm/java-6-openjdk-amd64/jre)。如果没有设置,那么只要找到jni.h 标头所在的文件夹就更简单了。

    我同意从 JNI 开始学习 Java 是一项艰巨的任务,但我尊重您的决定。如果你时尚书籍,我建议Core Java Volume I 和Core Java Volume II。特别是在后者的末尾,您可以找到相当详尽的原生方法介绍。

    【讨论】:

      【解决方案3】:

      我在 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 文件。

      【讨论】:

        【解决方案4】:

        如果 Visual Studio 成功安装在您的机器上,您可以使用 visual studio 开发人员命令提示符编译。

        要制作X86(32位)版本的dll,请使用 《VS20XX x86 Native Tools 命令提示符》

        要产生X64(64位)版本的dll使用 "VS20XX x64 Native Tools 命令提示符"

        VS20XX中的

        XX是visual studio 2008及以上版本。

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

        注意:确保在环境变量中设置了 JAVA_HOME 变量。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-10-01
          • 2020-08-23
          • 2012-07-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-07
          相关资源
          最近更新 更多