java调用.so文件

//第一步,

public class JavaToCTest

{

private native void sayHello();//声明本地方法.

static

{

System.loadLibrary("JavaToCTest");//需要加载的so库文件的名称,在linux中会在上前缀"lib"+库文件的名称.

}

public static void main(String[] args)

{

new JavaToCTest().sayHello();

}

}

 
  

//第二步,在linux系统中使用如下方法生成头文件.

javah -jni  JavaToCTest         使用该方法生成的头文件如下. 生成的文件是: JavaToCTest.h


/* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class JavaToCTest */


#ifndef _Included_JavaToCTest
#define _Included_JavaToCTest
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     JavaToCTest
 * Method:    printlns
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_JavaToCTest_sayHello (JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif


//第三步,编写 c 代码, 该文件的名称为 JavaToCTest.c

内容如下:

#include

#include

#include "JavaToCTest.h"


JNIEXPORT void JNICALL Java_JavaToCTest_sayHello(JNIEnv *env ,jobject obj)

{

printf("Java To C !!!!!   \n");

return;

}


//第四步:

编译生成库文件. 这个文件的文件名称为: libJavaToCTest.so

 gcc -I/usr/lib/jvm/java-6-openjdk/include/linux -I/usr/lib/jvm/java-6-openjdk/include/ -fPIC -shared -o  libJavaToCTest.so  JavaToCTest.c


//第五步:

运行java文件.

为了让java找到此so,运行:export LD_LIBRARY_PATH=.,将当前目录加入此环境变量。

java  JavaToCTest


如果看到 java To C 说明调用成功.














你可能感兴趣的:(JNI)