您的位置:首页 > 编程语言 > C语言/C++

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

2012-03-29 19:09 531 查看
本文主要的内容来源于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!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: