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

原创 2012年03月29日 19:09:48

本文主要的内容来源于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!

相关文章推荐

Java调用C语言Dll库回调函数

import com.sun.jna.Native; import com.sun.jna.win32.StdCallLibrary; public class SaDllCallbackFunct...

JNI 和 JNA,java和其他语言的互调

声明:工作需要 java调用C语言的方法: 1、JNI --- java native interface 2、JNA 3、runtime.exec() ,没有研究 4、CORBA , 没有研究...

eclipse下jni初学,调用helloworld.dll,打印字串”Hello world!”

http://hi.baidu.com/hxin1116/item/1a69296e6fa64f2668105b5a

C语言学习篇-1Hello, World!(编写、编译、链接、运行)

说明:初识第一个程序。开发工具的选择 写代码的工具:记事本、ULtraEdit、Vim、Xcode等。 选择Xcode的原因:苹果公司官方提供的开发利器、简化开发的工程、有高亮显示功能。 代码编写 程...

快速学习C语言一: Hello World

http://www.popo.tw/books/331339 http://www.popo.tw/books/331349 http://www.popo.tw/books/331351

C语言学习之1(Microsoft Visual Studio即VC6软件的安装及hello world 简单例子编写)

最近要用到C语言方面的知识了,所以又拿起大学的书籍(数据结构(C语言版)http://c.biancheng.net/cpp/u/shuju/),加上网上的教程http://c.biancheng.n...

自动生成Jni中Java调用C语言实现的签名函数名

首先编写一个类例如HelloWorld.java类文件 把你要在Java代码中声明的调用C语言的native函数声明写在Helloworld.java代码中 例如: public class Hell...

Android-JNI(5)-C语言调用Java函数

java定义方法和native方法package com.example.ndkcallback;import java.lang.reflect.InvocationTargetException;...

C语言蛋疼的Hello World代码

  • 2012年02月28日 21:44
  • 3KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JNI学习--通过Java应用调用C语言的函数打印hello,world
举报原因:
原因补充:

(最多只允许输入30个字)