linux Jni调用so文件建了测试WebProject 写了一个servlet执行调用 一启动tomcat jvm崩溃了 错误日志如下

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux Jni调用so文件建了测试WebProject 写了一个servlet执行调用 一启动tomcat jvm崩溃了 错误日志如下相关的知识,希望对你有一定的参考价值。

声明下 在window环境中同样的项目是可以运行的 linux单独运行测试类型也是可以的 唯独放到tomcat上就不行

#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00b920c3, pid=8567, tid=3073481616
#
# JRE version: 6.0_27-b07
# Java VM: Java HotSpot(TM) Server VM (20.2-b06 mixed mode linux-x86 )
# Problematic frame:
# C [libc.so.6+0x700c3] short+0x33
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#
太多贴不下

下面是代码
package uap.util;
public final class PmUtil

static
System.out.println(System.getProperty("java.library.path"));
System.loadLibrary("pmlib");

public static native int getPmlibNegShareKeyByASAddr(String strReq_IDV,
String strASIP,
String LocalIP);
public static native String getPmlibCheckTicket(
String strReq_IDV,
String strTicket,
String strASIP,
String iASsystemNum,
String iAShostNum,
String iASentityNum
);
public static native int getHello();
private PmUtil()

public static void main(String args[])

int ret = PmUtil.getPmlibNegShareKeyByASAddr("SERVICE103-2@KJRA.MILCA", "192.168.3.211", "127.0.0.1");
System.out.println("Jni调用成功,返回值为:"+ret);




你的jvm崩溃应该是由于你的C/C++代码而不是java代码
你在tomcat上跑是单线程访问还是多线程访问,你的测试类应该是写的单线程吧,改成多线程测测看追问

我就是用Javac编译 然后使用Java命令执行 这样是可以得到返回值的 这算单线程嘛? 那多线程应该怎么测试呢?

追答

这样当然是单线程的,多线程就是把你的java执行过程加到多线程中去再测试
你可以参考另外一位同学的说法用gdb调试下,先定位到出问题的地方

参考技术A 建议你在linux底下编译so加-g选项,然后gdb java,进去以后可以b c函数名来设置断点,单步调试。或者生成core文件 ,再gdb java core看看崩溃堆栈上下文。推荐第一种方式。追问

首先谢谢你的回答 这个库是人家提供给我的编译好像用的make命令吧 这个怎么加-g呢

追答

-g是编译选项,要是可以干涉的就可以跟那个人提。要是不行的你就跟他说,这个是因为调用库函数出现了问题,让他解决。

在使用jni调用so库时出现的找不到文件是怎么回事?

Exception in thread "main" java.lang.UnsatisfiedLinkError: /home/wst/Workspaces/MyEclipseProfessional/ApkPatchLibraryServer/libbsdiffjni.so: /home/wst/Workspaces/MyEclipseProfessional/ApkPatchLibraryServer/libbsdiffjni.so: cannot open shared object file: No such file or directory (Possible cause: can't load ARM-bit .so on a IA 32-bit platform) 这就是一直在报的错误,搞了好长时间没有搞好,这是哪里出现了问题?

参考技术A ossible cause: can't load ARM-bit .so on a IA 32-bit platform
ARM结构的程序,不可以在X86结构的CPU上执行追问

那能请教一下这个ARM结构的程序能不能转成x86结构的呢?

本回答被提问者和网友采纳

以上是关于linux Jni调用so文件建了测试WebProject 写了一个servlet执行调用 一启动tomcat jvm崩溃了 错误日志如下的主要内容,如果未能解决你的问题,请参考以下文章

java 本地方法(JNI)

在使用jni调用so库时出现的找不到文件是怎么回事?

JNI和NDK

在windows下 如何使用java jni调用so文件

JNI之Java调用so文件

Android 开发--CMakeList调用本地so文件