java native方法调用c 非安卓

环境:Ubuntu16.04
jdk10
1、java代码
class HelloWorld{
public native void hello(String name);
static{
System.loadLibrary("hello");
}
public static void main(String[] args){
new HelloWorld().hello("jni");
}
}
2、代码编译
javac HelloWorld.java
3、生成.h头文件
由于jdk10已经弃用javah工具,所以我们使用
javac -h hdir HelloWorld
生成HelloWorld.h,其中hdir是.h文件存放目录(这里是相对路径),HelloWorld是类名
4、编写c实现该头文件
#include
#include "HelloWorld.h"
#include
JNIEXPORT void JNICALL Java_HelloWorld_hello(JNIEnv *env,jobject obj){
printf("Hello World!\n");
return;
}
5、c转为so文件
gcc -I%java_home%\include -I%java_home%\include\linux -c -fPIC -o hello.o hello.c
gcc -shared -o hello.so hello.o
6、重命名hello.so为libhello.so
7、运行程序
将libhello.so移动到/lib中
mv libhello.so /lib
java HelloWorld
或者在 /etc/profile 指定so文件位置,添加如下脚本属性
//该方法比较好,避免so文件拷贝的到处都是
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/root/native
source profile
java HelloWorld
或者单次运行指定so文件位置
java -Djava.library.path=/root/native HelloWorld