Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何修复加载c+时的异常访问冲突+;dll文件? 问题_C++_Netbeans_Java Native Interface_Cygwin_Access Violation - Fatal编程技术网

C++ 如何修复加载c+时的异常访问冲突+;dll文件? 问题

C++ 如何修复加载c+时的异常访问冲突+;dll文件? 问题,c++,netbeans,java-native-interface,cygwin,access-violation,C++,Netbeans,Java Native Interface,Cygwin,Access Violation,我正在使用Java本机接口(JNI)编写一个简单的Hello World程序。当我调用Stale.Load LooCo(LIbSimeLejJNI)加载包含C++ Hello World功能的DLL文件时,就会出现一个ExtExtIAccess违规(0xC090005)(我在NETBeCes中编译为64位CygWin)。 我尝试静态加载库,并将它加载到调用C++ Hello World函数的java助手函数中。我在系统环境变量中添加了cygwin1.dll的路径,这解决了早期Java无法找到dl

我正在使用Java本机接口(JNI)编写一个简单的Hello World程序。当我调用Stale.Load LooCo(LIbSimeLejJNI)加载包含C++ Hello World功能的DLL文件时,就会出现一个ExtExtIAccess违规(0xC090005)(我在NETBeCes中编译为64位CygWin)。 <>我尝试静态加载库,并将它加载到调用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:\Users\Kogondo Admin\Desktop\JavaApplication7\hs_err_pid19116.log
下面是Java代码 这里是C++代码 正确运行时,我希望代码将“hi from C”打印到Netbeans中的输出窗口。

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

下面是我找到的一个方法,通过这些方法可以实现这一点。请注意,视频是葡萄牙语的。也就是说,下面的文章是英文的,视频演练逐步展示了您需要执行哪些命令和配置

如果其他人认为我的解决办法有用,我愿意进一步阐述我的解决办法。
祝你好运

在Cygwin上使用GCC或Clang进行IIRC编译将添加对Cygwin DLL的依赖,使其在没有Cygwin的情况下无法执行。为什么不直接用合适的MSVC工具链编译呢?我不知道怎么做。Visual Studio无法识别JNI代码。默认情况下,它不知道JNICALL是什么或JNIEnv类型是什么(我也不知道)。所有文件都与JDK安装一起提供。如前所述,当使用Cygwin工具链构建dll时,它会在cygwin1.dll上创建一个隐式依赖项,除非您有特殊需要使用Cygwin进行POSIX仿真,否则这可能不是您想要的。但是,如果您想在Cygwin中工作,可以使用mingw工具链,例如,通过设置
CXX=x86\u 64-w64-mingw32-g++
。这不会添加Cygwin依赖项(但也不支持完整的POSIX仿真)。如果您使用JNI开始冒险,请查看以下内容:
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();
}
void JNICALL Java_javaapplication7_thingy_hello (JNIEnv * env, jobject object){

     printf("hi from C");

}