我的设置是我正在使用Java应用程序用JNI调用本机C代码,后者又启动MATLAB运行时并调用其上的函数(我知道还有其他解决方案可以从Java调用MATLAB方法) )。
问题是MATLAB引擎在初始化期间的某个时刻崩溃了,我不知道究竟是什么导致了它。崩溃导致我的jvm终止,我认为这是某种内存损坏。
调用实际崩溃的MATLAB函数的C ++代码是
JNIEXPORT void JNICALL some_jni_vodoo_initializeLibrary(JNIEnv* env, jclass thisClass) { try { if (!mclInitializeApplication(NULL, 0)) { THROW_EXCEPTION(env, "Could not initialize the application properly."); return; } if (!<library>Initialize()) { THROW_EXCEPTION(env, "Could not initialize the library."); return; } } ...
函数<library>Initialize()
崩溃,Java错误日志读取
Stack Trace: [0] jmi.dll:0x793f4175(0x7934cdca, 1, 0x7937e67c "à;.y`E.y@E.ychar in C:\BUILD_ARE..", 0x792d6a32) [1] jvm.dll:0x792df9a5(0xc0000005, 0x79356791, 0x4961b400 "Ð\8y", 0x6d8b29de) [2] jvm.dll:0x792e0431(0x8b515008, 0x70f0e8ce, 0x8b5ffffa, 0xc25d5ec6) ------------------------------------------------------------------------ Fatal Java Exception detected at Fri Apr 30 11:08:08 2010 ------------------------------------------------------------------------ Configuration: MATLAB Version: 7.8.0.347 (R2009a) MATLAB License: unknown Operating System: Microsoft Windows Vista Window System: Version 6.0 (Build 6002: Service Pack 2) Processor ID: x86 Family 6 Model 10 Stepping 5, GenuineIntel Virtual Machine: Java is not enabled Default Encoding: windows-1252 Java is not enabled
我真的不知道会出现什么问题。 jvm没有足够的内存吗?我想这个问题在某种程度上与Java有关,因为从一个简单的测试C ++程序调用JNI函数工作正常......
由于
答案 0 :(得分:3)
我见过的唯一类似的事情是由于许可证无效而无法退出MATLAB。
另一种可能性是嵌套的Java环境。由于MATLAB需要自己的Java环境,因此这里可能存在一些问题。 修改:见下文!
你在运行MATLAB引擎吗?或者您是使用某些“系统”或“exec”调用来调用单独的MATLAB命令?这可能会提供一个很好的线索。
答案显示在评论的下方。为了便于阅读,将其复制到此处:
在具有自己的JVM的进程中嵌套MATLAB引擎的调用时,您必须通过将-nojvm
传递给mclInitializeApplication
来告诉MATLAB在没有JVM的情况下运行,或告诉它使用哪个JVM将全局MATLAB_JAVA
设置为您要使用的JVM的位置,例如C:\Program Files\Java\jre6
。
第一个选项将禁用MATLAB中需要JVM的任何功能,因此第二个选项更可取。