java jni的调用
当我们在java中要调用C/C++程序的函数时,就需要用到jni技术。开发环境:aix
本人写了一个测试,步骤如下:
1。新建HelloWorld.java类
public class HelloWorld
{
static
{
try
{
//此处即为本地方法所在链接库名
System.loadLibrary("HelloWorld");
}catch(UnsatisfiedLinkError e){
System.err.println( "不能加载dll文件:\n " +e.toString() );
}
}//end static
public native void SayHello(String strName);
}
2。运行javah HelloWorld 生成HelloWorld.h文件
3.编写helloWorld.c文件
#include <windows.h>
#include "HelloWorld.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_HelloWorld_SayHello (JNIEnv * env, jobject arg, jstring instring)
{
const jbyte *str =
(const jbyte *)env->GetStringUTFChars( instring, JNI_FALSE );
printf("HelloWorld,%s\n",str);
env->ReleaseStringUTFChars( instring, (const char *)str );
return;
}
int WINAPI DllMain (HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved)
{
return TRUE ;
}
4.编译生成.so
cc -I./ -I/usr/include -I/usr/java14/include -o \
libHolleWorld.so -bE:HolleWorld.exp -bnoentry -bM:SRE HolleWorld.c
其中HelloWorld.exp声明符号输出文件,内容如下:
Java_HelloWorld_SayHello
(注意。操作系统不同,编译生成.so的方法不同)
5.编写方法,在HelloWorld.java中加如下方法
public static void main(String args[]){
HelloWorld hw = new HelloWorld();
hw.SayHello("Christmas");
}
6.运行javac HelloWorld.java
7.运行java HelloWorld.输出如下结果
HelloWorld Christmas
页:
[1]