我的dll代码从一个exe文件中工作,但是无法从Java loadLibrary加
我创建了一个C模块来构建一个共享库文件,然后使用JNI从Java中调用它。
我有2个环境,Windows和Unix,我有一个C可执行程序和一个Java程序,我只是为每个环境重新编译。 >当我在Unix中编译我的tester.exe程序并使用方法运行它 我不知道为什么在Windows中运行Java loadLibrary时它不会起作用,但是在其他地方使用相同的代码可以工作。如果我延迟加载我的库使用的依赖DLL,那么我的库加载在Java中但不起作用。我知道有特定的代码导致Java加载我的库的问题,但我不知道为什么我的C exe没有问题与相同的方法和库。 我的dll有一个暴露的方法,它调用了一些现有库中的4种方法。如果我评论这4种方法,那么我的dll加载Java可以罚款。我知道这是从图书馆我的dll链接到这些方法。 Java看到依赖库有什么不同吗?我已经尝试加载依赖库,但我加载的一个dll文件会导致递归错误,堆栈溢出。 任何人知道一个方法围绕一个DLL,导致堆栈从递归错误溢出?我需要其中的方法,但是我无法使用java loadLibrary加载它。 以下是有关所涉及文件和实际错误信息的更多详细信息。 > myJavaProgram,只需调用System.loadLibrary()来加载基本的.dll 我在每一行的左边写了显示文本的文件,以显示执行的层次。 c:java myJavaProgram myJavaProgram: Java Static Method Entry. myJavaProgram: Java Calling System.loadLibrary(my_plain_dll_to_call_JNI_DLL) my_JNI_DLL.dll: Entering DllMain my_JNI_DLL.dll: DLL_PROCESS_ATTACH my_plain_dll_to_call_JNI_DLL: DLL_PROCESS_ATTACH my_plain_dll_to_call_JNI_DLL: DLL_THREAD_ATTACH my_plain_dll_to_call_JNI_DLL: DLL_THREAD_DETACH my_plain_dll_to_call_JNI_DLL: DLL_PROCESS_DETACH myJavaProgram: my_plain_dll_to_call_JNI_DLL Loaded! myJavaProgram: Java Static Method Exit. myJavaProgram: Entering Main(). my_plain_dll_to_call_JNI_DLL: In call_my_JNI_DLL_method my_JNI_DLL.dll: In my_JNI_DLL_method my_JNI_DLL.dll: Entering my_JNI_DLL_CheckEnvironmentVariables() my_JNI_DLL.dll: Exiting my_JNI_DLL_CheckEnvironmentVariables my_JNI_DLL.dll: Calling StartExistingNativeCode. # # A fatal error has been detected by the Java Runtime Environment: # # Internal Error (0xc0fb007e),pid=7500,tid=7552 # # JRE version: 6.0_21-b06 # Java VM: Java HotSpot(TM) Client VM (17.0-b16 mixed mode,sharing windows-x86 ) # Problematic frame: # C [KERNELBASE.dll+0x9673] # # An error report file with more information is saved as: # C:hs_err_pid7500.log # # 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. # my_plain_dll_to_call_JNI_DLL: DLL_PROCESS_DETACH my_JNI_DLL.dll: Entering DllMain my_JNI_DLL.dll DLL_PROCESS_DETACH 更新 找到附加信息 MemRegisterTask初始化SmartHeap库。在大多数平台上,您不需要调用MemRegisterTask,因为当您进行第一个调用时,SmartHeap将自动初始化。 SmartHeap维护每个任务或进程的注册引用计数。每次调用MemRegisterTask时,这个引用计数将递增。如果您的SmartHeap上次调用发生在应用程序准备好终止之前,可以调用MemUnregisterTask来终止SmartHeap。 MemUnregisterTask将注册引用计数递减1 – 当计数为零时,SmartHeap将释放与当前任务或进程相关联的任何SmartHeap分配内存和调试状态。
在hs_err …日志文件中有用的任何东西。通常有一个堆栈回溯等
指出一些东西 还试图运行java.exe(参数运行测试加载的东西)里面 从跟踪上面可以看到加载似乎工作正常(跟踪输出建议 加载顺序如下: >依赖负载的dll 所以这已经是加载DLL了。 您是否检查过您是否使用Windows中的调试/释放运行时间?调试可能与发布冲突 – Java发布,您的示例exe可能与您的dll版本相同。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 在Windows 下如何使用 AspNetCore Api 和 consul
- Windows – CMD Echo命令仅保留最后一行文本
- windows-vista – 存储vista安装程序中所有用户共享的可写数
- windows – 用于获取信号强度的WLAN API
- Windows中的特殊文件夹是否有明确的指南?
- 是否可以防止.NET MSIL DLL的反编译?
- iis-7 – 在IIS 7.5上为使用Windows身份验证的ASHX处理程序
- windows10s的具体内容和永久激活步骤和方法
- Windows Installer XML变量’WixUICostingPopupOptOut’在多
- 老机器XP Outlook Express 发大附件对方客户端收到解压失败