加载C DLL文件时,如何修复异常_access_violation
How to fix EXCEPTION_ACCESS_VIOLATION when loading c++ dll file?
问题
我正在使用Java本机接口(JNI(编写一个简单的Hello World程序。当我调用system.loadlibrary(" libsimple_jni"(以加载包含C Hello World函数的DLL文件时,发生了一个异常_ACCESS_VIOLATION(0xc0000005((我正在用64位Cygwin在NetBean中编译NetBean。
我尝试过静态加载库,并将其加载到称为C Hello World函数的Java辅助功能中。我在系统环境变量中添加了cygwin1.dll的路径,这些变量解决了java的早期问题,无法找到我的dll文件的依赖项。
这是确切的错误消息
Java运行时环境已经检测到了致命错误:
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:UsersKogondo AdminDesktopJavaApplication7hs_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");
}
正确运行时,我希望代码可以打印"从C"打印到Netbeans的输出窗口。
最终解决方案
7半小时,我终于设法找到了解决方案。我遵循Van Dench的建议,使用Visual Studios中的MINGW编译器而不是Netbeans中的Cygwin编译器生成我的DLL文件。
这是我发现的视频和纸张的链接,这些链接遍历了如何做到这一点。请注意,该视频位于葡萄牙。话虽如此,它遵循的论文是英文,视频演练逐步显示您需要做的命令和配置。
如果其他人觉得这有用,我愿意进一步详细说明我的解决方案。祝你好运!
相关文章:
- 处理多个异常集合的C++方法
- 我在c++代码中生成了一个运行时#3异常
- 孤立代码块在结构中引发异常
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++中的赋值发生,尽管右侧出现异常
- Boost Graph Library,修复节点大小
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 从构造函数抛出异常时如何克服内存泄漏
- 如何修复链表类实现的未处理异常0xDDDDDDDD
- 如何修复"ctypes"。参数错误:参数 2:<键入"异常.类型错误">:RaspberryPi 中的错误类型"错误
- 如何修复bad_typeid异常
- 如何在C++中修复PyImport_Import(python35.dll中的异常)
- 是什么导致异常输出以及如何修复
- 加载C DLL文件时,如何修复异常_access_violation
- 如何修复在代码的某个部分引发的此异常
- 如何修复<程序名称>中的"<内存位置>未处理的异常。Visual Studio 2017 中的访问冲突写入位置<内存位置>"
- 快速修复bad_cast login_message破裂的异常
- 如何修复此异常
- 1[main]972异常::handle:异常:STATUS_ACCESS_VIOLATION解释和如何修复