java jni调用so动态链接库详细步骤

jna 调用so库:https://blog.csdn.net/u014644574/article/details/118608423

1、安装32位的jdk

执行下面代码不报错为32位的jdk

java -d32 -version

2、安装mingw

安装后执行下面代码不报错。

gcc -v

下载地址:https://sourceforge.net/projects/mingw/

安装过程参考:https://blog.csdn.net/weixin_40571965/article/details/105174015

安装失败,搞个梯子就可以了。

3、d盘根目录创建HelloWorld.java

有中文记得改成gbk编码

class HelloWorld 
{
    // 载入 so 动态链接库
	static{
		//System.loadLibrary("HelloWorld");//dll方式
        System.load("d:/HelloWorld.so");//so方式
	}
	
    // 声明 so 库中的方法
	public native void myprint();
 
    // java 类入口函数
	public static void main(String[] args) 
	{
		new HelloWorld().myprint();
	}
}

编译生成Class文件HelloWorld

javac HelloWorld.java

生成文件头HelloWorld.h

javah -jni HelloWorld

4、d盘根目录创建HelloWorld.c

#include "HelloWorld.h"
 
JNIEXPORT void JNICALL
Java_HelloWorld_myprint(JNIEnv *env,jobject obj){
	printf("Hello World !\n");
	return;
}

5、编译本地C方法生成类库dll文件或者so文件

生成.so文件

gcc -Wl,--add-stdcall-alias -shared -IC:\jdk1.8.0_211\include -IC:\jdk1.8.0_211\include\win32 -o HelloWorld.so HelloWorld.c

或者生成.dll文件

gcc -Wl,--add-stdcall-alias -shared -IC:\jdk1.8.0_211\include -IC:\jdk1.8.0_211\include\win32 -o HelloWorld.dll HelloWorld.c

6、运行HelloWorld.class

java HelloWorld

猜你喜欢

转载自blog.csdn.net/u014644574/article/details/118606177