注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

倚天剑

青春要在奔跑中度过

 
 
 

日志

 
 
 
 

jni HelloWorld教程  

2013-08-24 19:30:09|  分类: 开发 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

特别说明:

本文件内的所有命令,不可直接复制,可能会导致在CMD窗口中无法识别,例如,我复制了:cl –I

结果CMD窗口提示:cl: 命令行 无法识别的源文件类型–I

说明,word中的-cmd中的-不是同一个字符,会导致莫名其妙的错误。

建议,可以先复制出去,然后放到txt文本中,再手动改掉-

 

1.创建一个文件helloworld.java,内容为:

public class helloworld {

    static{

        System.loadLibrary("helloworld");

    }

 

    public native void dispHelloWorld();

  

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        //System.getProperty("java.library.path");

        new helloworld().dispHelloWorld();

    }

}

 

2.编译生成.class文件,命令行:javac helloworld.java

可能遇到的错误:

1.'javac' 不是内部或外部命令,也不是可运行的程序或批处理文件。

原因:Java 的环境变量没有配置。

解决办法:把Java的安装目录下的bin加入环境变量。

 

2.HelloWorld.java:1: helloworld 是公共的,应在名为 helloworld.java 的文件中声明

原因:HelloWorld.javapublic class helloworld中的helloworld大小写不一致,这两个拼写必须完全相同。

解决办法:修改文件名称或类名,使二者相同。

3.生成扩展名为h的头文件javah helloworld

注意,这里是helloworld实际上是helloworld不是helloworld所以,必须先进行第2步,才能进行第3步。

 

4.创建一个文件jni_helloworldImp.cpp,内容为:

#include <jni.h>

#include "helloworld.h"

#include <stdio.h>

JNIEXPORT void JNICALL Java_helloworld_dispHelloWorld

(JNIEnv *env, jobject obj)

{

    printf("Hello world ! ");

    return;

}

 

其中,#include "helloworld.h"中的helloworld.h必须和第3步生成的头文件名称一样,Java_helloworld_dispHelloWorld方法名必须和第3步中的头文件中的方法名称一样。

 

5.生成动态库.dll文件

命令行: cl –I%java_home%\include –I%java_home%\include\win32 -LD jni_helloworldImp.cpp -Fehelloworld.dll

其中java_homejava的安装目录,HelloWorldImp.ccc++的源码文件,helloworld.dll是目标dll的名称,必须和第1步中的System.loadLibrary("helloworld")中的“helloworld”名称一样。

由于要使用到includeinclude\win32目录下的3个头文件,所以,要加上这个路径,路径最好用""包起来因为有空格会导致中断。

另外,某系情况下,cl命令是不能正常的,及时环境变量都配置好了,需要在命令窗口先运行Microsoft Visual Studio 11.0\Common7\Tools\vsvars32.bat,然后,在同一个窗口中,cl命令就正常了,其它命令行窗口中cl还是不正常。

 

可能的错误:

1.fatal error C1034: jni.h: 不包括路径集

原因:没有先运行vsvars32.bat

解决办法:先运行vsvars32.bat,例如:"D:\program files\x86\Microsoft Visual Studio 11.0\Common7\Tools\vsvars32.bat",在同一窗口中,执行cl命令。

2. fatal error C1083: 无法打开包括文件:jni.h: No such file or directory

原因:Java安装目录下的\includejni.h是不可见的。

解决办法:cl 后面一定要加上-I%java_home%\include -I%java_home%\include\win32类指定这个目录。

3. 无法识别的源文件类型

原因:java_home中有空格

解决办法:不使用java_home,而用绝对路径代替,并用””把路径包起来。

6.运行.class文件

Java helloworld

注意:这里的JREVC编译器必须是同样的位数,比如,都是64位,或32位。

可能的错误

1.      Can't load IA 32-bit .dll on a AMD 64-bit platform

原因:VC编译器是32bit,但是,JRE64bit

解决办法:下载一个32bitJRE,是比较简单的,安装,然后用32bitbin\java来运行helloworld,比如,用绝对路径:"D:\program files\x86\Java\jre7\bin\java" helloworld

  评论这张
 
阅读(2025)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017