gpt4 book ai didi

c++ - 加载c++ dll文件时如何修复EXCEPTION_ACCESS_VIOLATION?

转载 作者:搜寻专家 更新时间:2023-10-31 02:03:04 25 4
gpt4 key购买 nike

问题

我正在使用 Java native 接口(interface) (JNI) 编写一个简单的 Hello World 程序。当我调用 System.loadLibrary("libsimple_JNI") 加载包含 C++ hello world 函数的 dll 文件时,发生 EXCEPTION_ACCESS_VIOLATION (0xc0000005)(我正在使用 64 位 cygwin 在 Netbeans 中编译)。

我尝试过静态加载库以及在调用 C++ hello world 函数的 Java 辅助函数中加载它。我在系统环境变量中添加了 cygwin1.dll 的路径,这解决了早期 Java 无法找到我的 dll 文件的依赖项的问题。

这是准确的错误信息

Java 运行时环境检测到 fatal error :

EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x0000000180128dd7, pid=19116, tid=0x0000000000003ea8

JRE version: Java(TM) SE Runtime Environment (8.0_131-b11) (build 1.8.0_131-b11)
Java VM: Java HotSpot(TM) 64-Bit Server VM (25.131-b11 mixed mode windows-amd64 compressed oops)
Problematic frame:
C [cygwin1.dll+0xe8dd7]

Failed to write core dump. Minidumps are not enabled by default on client versions of Windows

An error report file with more information is saved as:
C:\Users\Kogondo Admin\Desktop\JavaApplication7\hs_err_pid19116.log

这是Java代码

public static void main(String[] args) {
thingy my_thingy = new thingy();
my_thingy.hi();
}
public class thingy {
public thingy() {}

public void hi(){
System.loadLibrary("libsimple_JNI");
hello();
}

private native void hello();
}

这是C++代码

void JNICALL Java_javaapplication7_thingy_hello (JNIEnv * env, jobject object){

printf("hi from C");

}

当正常运行时,我希望代码将“hi from C”打印到 Netbeans 的输出窗口。

最佳答案

最终解决方案

7个半小时我终于找到了解决办法。我听从了 van dench 的建议,使用 Visual Studios 中的 minGW 编译器而不是 Netbeans 中的 cygwin 编译器生成我的 dll 文件。

这是一个link to the videopaper我发现其中介绍了如何执行此操作。请注意,该视频是葡萄牙语的。话虽这么说,它后面的论文是英文的,视频演练逐步显示了您需要执行的命令和配置。

如果其他人觉得有用,我愿意进一步详细说明我的解决方案。祝你好运!

关于c++ - 加载c++ dll文件时如何修复EXCEPTION_ACCESS_VIOLATION?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56051306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com