关闭

JNI学习--通过Java应用调用C语言的函数打印hello,world

标签: javajnic语言includemicrosoft
1357人阅读 评论(0) 收藏 举报
分类:

本文主要的内容来源于Java Native Interface: Programmer's Guide and Specification中的第二章的内容,最后附加遇到的问题的解决方案。可通过http://java.sun.com/docs/books/jni/下载该书。

开发环境:

Win7+VS2010+JDK1.6.0_27

Linux下如何使用可参考http://my.unix-center.net/~Simon_fu/?p=359

1、声明本地方法 Declare the Native Method

新建文件HelloWorld.java,输入以下内容

 class HelloWorld {
     private native void print();
     public static void main(String[] args) {
         new HelloWorld().print();
     }
     static {
         System.loadLibrary("HelloWorld");
     }
 }
2、编译为class文件

javac HelloWorld.java
如果说找不到javac,说明没有添加环境变量,加入java的环境变量

3、生成本地方法的头文件 Create the Native Method Header File

javah -jni HelloWorld
当前目录下会生成.h的头文件

4、实现本地方法 Write the Native Method Implementation

新建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;
 }
5、编译C的源码,生成本地库 Compile the C Source and Create a Native Library

cl -Ic:\java\include -Ic:\java\include\win32 -MD -LD HelloWorld.c -FeHelloWorld.dll
为了使上述命令成功执行,需要做两件事情

1)找到JDK的安装目录,我的在C:\Program Files\Java\jdk1.6.0_27,里面有一个include文件夹,把该文件夹拷贝到C盘下面的java文件夹(新建一个)下。

为什么要拷贝?因为我的JDK路径中有Program Files,存在空格,如果可以避免空格的话,也就不用拷贝了

当然,上述命令中出现的c:\java\include和include文件夹所在的路径相匹配,所以也没必要一定放在C盘的下面

2)cl命令在命令行下面执行,会提示

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

最初的想法是配置环境变量,C:\Program Files\Microsoft Visual Studio 10.0\VC\bin加入环境变量,之后,出现如下问题

无法启动此程序,因为计算机中丢失mspdb100.dll。尝试重新安装该程序以解决此问题。

在网上搜索后得知原因为

由于cl.exe依赖VS的环境配置,如果只是以WINDOWS控制台方式进入命令窗口,VS2010相关的环境变量不会被加载,这种情况下在启动CL时就会报以上错误。

需要运行VS2010自带的控制台,可通过如下方式打开

开始-->所有程序-->Microsoft Visual Studio 2010-->Visual Studio Tools-->Visual Studio 命令提示(2010)

6、运行程序

java HelloWorld
可以看到

Hello World!
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:79010次
    • 积分:1174
    • 等级:
    • 排名:千里之外
    • 原创:34篇
    • 转载:9篇
    • 译文:1篇
    • 评论:12条
    文章分类
    最新评论