我们可以通过jni来调用c/c++程序,C/C++一般会被作为动态库的形式来供java程序调用
环境
操作系统:Centos6.7
java: openjdk7
依赖包:java7-devel(yum install -y java7-devel)
java程序
在hava程序中会调用本地方法,而这个本地方法使用C语言实现的。
public class HelloWorld{ static { System.loadLibrary("Hello"); } public native void DisplayHello(); public static void main(String[] args){ new HelloWorld().DisplayHello(); } }
编译java程序:javac HelloWorld.java
生成相应的头文件:javah -jni HelloWorld
下面是生成的HelloWorld.h的内容,其中的白色部分就是需要在C代码中实现的函数。
C程序
#include<jni.h> #include"HelloWorld.h" #include<stdio.h> JNIEXPORT void JNICALL Java_HelloWorld_DisplayHello(JNIEnv *env, jobject obj){ printf("Hello world\n"); return; }
在C程序中,我们需要包含jni.h以及刚才生成的HelloWorld.h。如果从C的角度来看,一般一个.h文件会对应一个.c文件。而.h文件中一般是函数的声明,而.c文件是具体函数的实现。HelloWorld.h中有函数的声明,而C程序中就应该有函数的实现。
这样,但是通过javah生成.h文件时,剩下的工作就是C方面的编程问题了。
将C程序生成动态库:
在生成动态库的时候需要制定头文件(jni.h)的位置,安装java依赖库的时候会将其安装到/usr/local下,所以需要用-I选项来明确指出
执行
在执行的时候需要指定C库的位置
参考博文:
http://blog.csdn.net/banketree/article/details/40535325
http://www.cnblogs.com/mandroid/archive/2011/06/15/2081093.html
时间: 2024-10-04 15:01:46