wfy8627 2024-09-29 09:29 采纳率: 25%
浏览 1

java、jna、报错

ubuntu下java通过jna方式,调用c++算法报错:
#

A fatal error has been detected by the Java Runtime Environment:

SIGSEGV (0xb) at pc=0x00007e268bc01621, pid=553460, tid=138704106550848

JRE version: Java(TM) SE Runtime Environment (8.0_66-b17) (build 1.8.0_66-b17)

Java VM: Java HotSpot(TM) 64-Bit Server VM (25.66-b17 mixed mode linux-amd64 compressed oops)

Problematic frame:

C [line.so+0x1621] ExtendLinesPlan+0x10f

Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again

An error report file with more information is saved as:

/home/wz/snap/hs_err_pid553460.log

If you would like to submit a bug report, please visit:

http://bugreport.java.com/bugreport/crash.jsp

The crash happened outside the Java Virtual Machine in native code.

See problematic frame for where to report the bug.

  • 写回答

1条回答 默认 最新

  • 一轮明月照丘壑 2024-09-29 09:34
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    在Java中,当尝试从JNA(Java Native Access)库调用C++算法时遇到错误,可能的原因有多种。这里提供一些常见的解决方法:

    1. 确保编译器支持C++标准库:JNA依赖于C++标准库,如、等。确保您的编译器支持这些库。

    2. 检查JNI接口是否正确定义:检查jni.h文件中的JNI接口声明是否正确。例如,如果你正在调用一个名为myAlgorithm的方法,你需要在jni.h中这样声明:

    extern "C" {
        JNIEXPORT jmethodID JNICALL Java_com_your_company_your_class myAlgorithm(JNIEnv *, jobject);
    }
    
    1. 检查类路径:确认您使用的类路径与您的项目配置一致。例如,在Ubuntu上,您可能需要添加/usr/local/include/jni到环境变量PATH中,以访问C++标准库。

    2. 验证JNI版本:确保您的JNA库版本是最新且兼容的。您可以查看jni.h文件中指定的版本号,然后更新相应的JNA库版本。

    3. 检查JNI参数:如果您试图调用一个接收两个参数的函数,但只提供了单个参数,请确保将传入的参数传递给正确的参数索引。例如:

    // 假设我们有一个接受两个整数参数的函数:
    JNIEXPORT jint JNICALL Java_com_your_company_your_class myAlgorithm(jobject self, jint arg1, jint arg2) {
        // ...
    }
    
    // 调用此函数时,仅提供了arg1:
    JNIEXPORT jint JNICALL Java_com_your_company_your_class myAlgorithm(JNIEnv *env, jobject obj, jint arg1) {
        return myAlgorithm(env, arg1);  // 将此处的obj替换为实际的jobject
    }
    
    1. 如果问题仍然存在,请提供更多关于错误信息和日志内容,以便更准确地定位问题所在。

    2. 更新Java版本至最新:有时,Java版本过旧可能导致兼容性问题。确保您正在使用的是最新版的Java。

    3. 使用JNA的第三方库:有时候,特定的第三方库可能会导致问题,特别是当它们没有适配JNA时。尝试禁用某些库并重新构建JNA。

    4. 检查内存泄漏:有时,内存泄露会导致应用程序崩溃。使用JNA的调试工具来查找和修复任何潜在的问题。

    请注意,以上建议适用于大多数情况,但在极端情况下,可能需要深入分析问题原因。希望这些建议能帮到您!

    评论

报告相同问题?

问题事件

  • 创建了问题 9月29日

悬赏问题

  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?
  • ¥15 nasm x86 变量归零
  • ¥65 Tree 树形控件实现单选功能,可以使用element也可以手写一个,实现全选为全选状态
  • ¥60 寻抓云闪付tn组成网页付款链接
  • ¥16 寻字节跳动内部人员帮推简历
  • ¥20 如何通过sentry收集上传Android ndk的崩溃?