1.编写java类
public class Abc { static { System.loadLibrary("abc"); } public native static String getAbc(); public static void main(String s[]) { System.out.println(getAbc()); } }
终端执行: java Abc.java
再执行:javah Abc 生成Abc.h文件
生成Abc.h的头文件,内容如下:
/* DO NOT EDIT THIS FILE - it is machine generated */ #include </usr/local/jdk1.8.0_201/include/jni.h> /* Header for class Abc */ #ifndef _Included_Abc #define _Included_Abc #ifdef __cplusplus extern "C" { #endif /* * Class: Abc * Method: getAbc * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_Abc_getAbc (JNIEnv *, jclass); #ifdef __cplusplus } #endif #endif
编写C文件:
#include <stdio.h> #include "Abc.h" JNIEXPORT jstring JNICALL Java_Abc_getAbc(JNIEnv *env, jclass t2) { char *ptr = "hello world"; jstring str ; str = (*env)->NewStringUTF(env, ptr); return str; }
生成动态库:gcc test.c -fPIC -shared -o libabc.so
将动态库拷贝至: cp libabc.so /usr/local/jdk1.8.0_201/jre/lib/amd64/
然后终端运行 java Abc
[root@sec javatest]# javac Abc.java
[root@sec javatest]# java Abc
hello world
至此 java调用linux下动态库成功
原文:https://www.cnblogs.com/porkerface/p/12789833.html