使用JNI调用C库中函数时发生段错误

1、我自己安装了JDK包,版本为jdk.1.7.0_79

attachments-2020-11-XvzhL3VX5faa3b3f45d80.jpg里面有头文件jni.h,由于在头文件jin.h里又包含了jni_md.h这个头文件,所以我就直接将这两个头文件拷贝到用于生成libnativa.so这个动态库文件的C程序目录中

2、生成libnativa.so这个动态库文件的C程序目录

attachments-2020-11-ssTZGskh5faa3beb97f55.jpg(1)native.c文件

attachments-2020-11-qWcJjC8z5faa3c3e413e5.jpg

(2)Makefile文件

attachments-2020-11-EaisG3dR5faa3c6a115c8.jpg

执行make命令后会生成libnativa.so这个动态库文件,然后将libnativa.so这个动态库文件拷贝到Java程序所在的目录中

(1)Hello.java文件

attachments-2020-11-F6AS9WFS5faa3d1e7c7bf.jpg


编译和运行过程:

attachments-2020-11-85VZG2Re5faa3d909d756.jpg执行javac Hello命令编译成功,生成了Hello.class文件;

执行export LD_LIBRARY_PATH=.将库路径设置为当前路径

执行java Hello命令来运行时就发生了段错误,请老师指导一下,一开始学习确实不知道如何解决这个问题。

请先 登录 后评论

最佳答案 2020-11-12 20:26

在native.c文件中定义methods这个结构体数组时写错了,正确的方式是static const JNINativemethod methods[] = {},但是我却写成了static const JNINativemethod methods [] = {},即methods与[]之间有一个空格,编译是没有问题的,但是运行的时候会发生段错误。

请先 登录 后评论

其它 1 个回答

百问网-黄老师
擅长:嵌入式开发

参考编译命令和设置;



javac Jni.java
javah -jni Jni
gcc -I /usr/lib/jvm/java-1.8.0-openjdk-amd64/include/ -I /usr/lib/jvm/java-1.8.0-openjdk-amd64/include/linux -fPIC -shared -o libnative.so native.c
export LD_LIBRARY_PATH=.
java Jni
请先 登录 后评论
  • 2 关注
  • 0 收藏,1027 浏览
  • 徐亮 提出于 2020-11-10 15:16

相似问题