Linux下Java调用C

来源:互联网 发布:软件开发兼职协议 编辑:程序博客网 时间:2024/05/17 22:33

概述

Java要想调用C的程序,就要把C生成的DLL文件给Java调用,也就是要使用Java的本地化方法JNI调用C的DLL文件。Java本地接口JNI(Java Native Interface),设计目的是与C/C++实现本地交互。

实现

1、在Java类中声明native方法,在静态代码块中通过Sytem.loadLibrary("类名")来加载库文件;

2、编译Java类(javac java文件名);

3、生成扩展名为h的头文件(javah -jni java类名);

4、通过C/C++实现本地方法;

5、将本地方法生成动态链接库;

6、Java程序调用动态链接库。

示例

1、声明HelloWorld类,声明本地方法sayHello,加载HelloWorld库文件。

public class HelloWorld
{      
        static
        {
                System.loadLibrary("HelloWorld");
        }
        private native void sayHello();
        public static void main(String[] args)
        {
                new HelloWorld().sayHello();
        }
}

2、编译HelloWorld.java

javac HelloWorld.java

3、声称C语言头文件
javah -jni HelloWorld

4、实现本地方法

#include <stdio.h>
#include "HelloWorld.h"

JNIEXPORT void JNICALL Java_HelloWorld_sayHello(JNIEnv * env, jobject obj)
{
        printf("Hello World in C!\n");
        return;
}

5、声称动态库

find / -name "jni.h"
/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/include/jni.h

find / -name "jni_md.h"

/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/include/linux/jni_md.h

gcc -I/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/include/ -I/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/include/linux  -fPIC -shared HelloWorld.c HelloWorld.h -o libHelloWorld.so

6、运行程序调用动态库

java -Djava.library.path=. HelloWorld

 


 

 

 

0 0
原创粉丝点击