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,输入以下内容
如果说找不到javac,说明没有添加环境变量,加入java的环境变量
3、生成本地方法的头文件 Create the Native Method Header File
当前目录下会生成.h的头文件
4、实现本地方法 Write the Native Method Implementation
新建HelloWorld.c文件,编写如下内容
为了使上述命令成功执行,需要做两件事情
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、运行程序
可以看到
开发环境:
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!
相关文章推荐
- JNI:Java调用C函数打印hello,world
- java通过JNI调用C语言写的函数,能提高运行效率吗?
- java通过JNI调用C语言写的函数,能提高运行效率吗?
- 在Java程序中调用C函数--打印"HelloWorld"
- 【学习Android NDK开发】Java通过JNI调用native方法
- Cocos2dx通过JniHelper调用java函数,报错error link2019: 无法解析的外部命令
- android jni c/c++线程通过CallVoidMethod调用java函数出现奔溃问题
- javap 可以打印出用于jni调用的java函数的签名信息
- eclipse下jni初学,调用helloworld.dll,打印字串”Hello world!”
- Java通过JNI调用C语言的方法
- Java通过JNI调用C语言的方法
- 【学习Android NDK开发】native code通过JNI调用Java方法
- cocos2dx:C++层通过JniHelper调用JAVA层代码进而调用Android手机应用接口
- Java 中的 int 与 Integer 用于 List<Integer> 时,以及通过打印变量检测程序运行和函数调用次数计数
- 【学习Android NDK开发】native code通过JNI调用Java方法
- JNI开发第二篇通过反射实现C中调用java代码,并实现Log打印日志
- 【学习Android NDK开发】native code通过JNI调用Java方法
- 【学习Android NDK开发】native code通过JNI调用Java方法
- JNI学习------C语言调用Java (转)
- 【学习Android NDK开发】native code通过JNI调用Java方法