简体   繁体   English

MatLab C ++共享的DLL库初始化崩溃

[英]MatLab C++ Shared Dll Library Initialization Crash

I am using Matlab 2013a and Visual Studio 2013. I am trying to use MatLab compiled dll from a C++ console application. 我正在使用Matlab 2013a和Visual Studio2013。我正在尝试从C ++控制台应用程序使用MatLab编译的dll。 My simple Matlab test dll and console application is compiled for 64bit machines (I made sure they are 64bit via dumpbin). 我简单的Matlab测试dll和控制台应用程序是为64位计算机编译的(通过转储,我确保它们是64位的)。 I also have correct version of MCR installed on my machine (even if it's not necessary). 我的计算机上也安装了正确版本的MCR(即使没有必要)。

I setup my compiler using "mbuild -setup" command. 我使用“ mbuild -setup”命令设置编译器。

I compile my .m file using this command line: "mcc -v -W cpplib:mylib -T link:lib myFunc" successfully. 我使用以下命令行编译.m文件:“ mcc -v -W cpplib:mylib -T link:lib myFunc”成功。

In my console application, I include these libraries: mylib.lib, mclmcrrt.lib, mclmcr.lib, libmx.lib, libmat.lib and use the libraries in this path "C:\\Program Files\\MATLAB\\R2013a\\extern\\lib\\win64\\microsoft" 在我的控制台应用程序中,我包括以下库:mylib.lib,mclmcrrt.lib,mclmcr.lib,libmx.lib,libmat.lib,并在以下路径中使用这些库:“ C:\\ Program Files \\ MATLAB \\ R2013a \\ extern \\ lib \\ win64 \\ microsoft”

When I debug my program, it successfully initializes MCR using this call: "mclInitializeApplication(NULL, 0)" but when I call "mylibInitialize()" in order to initialize my library, program crashes. 当我调试程序时,它使用以下调用成功初始化了MCR:“ mclInitializeApplication(NULL,0)”,但是当我调用“ mylibInitialize()”以初始化我的库时,程序崩溃。 It doesn't even throw an axception therefore I cannot handle it using try/catch block. 它甚至都不会引发接受,因此我无法使用try / catch块来处理它。 It gives unhandled exception and access vialoation error message. 它给出了未处理的异常和访问错误信息。

These are sample debug output messages I got; 这些是我得到的示例调试输出消息。

First-chance exception at 0x00007FFA22761F08 in MatlabTest.exe: Microsoft C++ exception: xercesc_2_7::NoSuchElementException at memory location 0x000000E263EF4E48. MatlabTest.exe中0x00007FFA22761F08的第一次机会异常:Microsoft C ++异常:内存位置0x000000E263EF4E48的xercesc_2_7 :: NoSuchElementException。

First-chance exception at 0x00007FFA22761F08 in MatlabTest.exe: Microsoft C++ exception: xsd_binder::MalformedDocumentError at memory location 0x000000E263EF4E40. MatlabTest.exe中0x00007FFA22761F08的第一次机会异常:Microsoft C ++异常:内存位置0x000000E263EF4E40处的xsd_binder :: MalformedDocumentError。

First-chance exception at 0x00007FFA22761F08 in MatlabTest.exe: Microsoft C++ exception: xercesc_2_7::NoSuchElementException at memory location 0x000000E263EF4E48. MatlabTest.exe中0x00007FFA22761F08的第一次机会异常:Microsoft C ++异常:内存位置0x000000E263EF4E48的xercesc_2_7 :: NoSuchElementException。

First-chance exception at 0x00007FFA22761F08 in MatlabTest.exe: Microsoft C++ exception: boost::thread_interrupted at memory location 0x000000E2643FF630. MatlabTest.exe中0x00007FFA22761F08的第一次机会异常:Microsoft C ++异常:boost :: thread_interrupt在内存位置0x000000E2643FF630。

First-chance exception at 0x00007FFA22761F08 in MatlabTest.exe: Microsoft C++ exception: boost::thread_interrupted at memory location 0x000000E2642FFCD0. MatlabTest.exe中0x00007FFA22761F08的第一次机会异常:Microsoft C ++异常:boost :: thread_interrupted在内存位置0x000000E2642FFCD0。

First-chance exception at 0x00007FFA22761F08 in MatlabTest.exe: Microsoft C++ exception: CryptoPP::AES_PHM_Decryption::InvalidCiphertextOrKey at memory location 0x000000E264EFB0F0. MatlabTest.exe中0x00007FFA22761F08的第一次机会异常:Microsoft C ++异常:内存位置0x000000E264EFB0F0处的CryptoPP :: AES_PHM_Decryption :: InvalidCiphertextOrKey。

First-chance exception at 0x00007FFA22761F08 in MatlabTest.exe: Microsoft C++ exception: tfFailedException at memory location 0x000000E264EF4C10. MatlabTest.exe中0x00007FFA22761F08的第一次机会异常:Microsoft C ++异常:内存位置0x000000E264EF4C10的tfFailedException。

First-chance exception at 0x00007FFA22761F08 in MatlabTest.exe: Microsoft C++ exception: varflowFailedException at memory location 0x000000E264EF9410. MatlabTest.exe中0x00007FFA22761F08的第一次机会异常:Microsoft C ++异常:内存位置0x000000E264EF9410的varflowFailedException。 The thread 0x3550 has exited with code 0 (0x0). 线程0x3550已退出,代码为0(0x0)。 'MatlabTest.exe' (Win32): Loaded 'C:\\Program Files\\MATLAB\\R2013a\\bin\\win64\\hgbuiltins.dll'. 'MatlabTest.exe'(Win32):已加载'C:\\ Program Files \\ MATLAB \\ R2013a \\ bin \\ win64 \\ hgbuiltins.dll'。 Cannot find or open the PDB file. 找不到或打开PDB文件。

First-chance exception at 0x0000000000B46E60 (m_interpreter.dll) in MatlabTest.exe: 0xC0000005: Access violation reading location 0x0000000064EF3B90. MatlabTest.exe中0x0000000000B46E60(m_interpreter.dll)的第一次机会异常:0xC0000005:访问冲突读取位置0x0000000064EF3B90。 Unhandled exception at 0x0000000000B46E60 (m_interpreter.dll) in MatlabTest.exe: 0xC0000005: Access violation reading location 0x0000000064EF3B90. MatlabTest.exe中0x0000000000B46E60(m_interpreter.dll)处未处理的异常:0xC0000005:访问冲突读取位置0x0000000064EF3B90。

The program '[12952] MatlabTest.exe' has exited with code 0 (0x0). 程序“ [12952] MatlabTest.exe”已退出,代码为0(0x0)。

I installed MCR to another machine and tried to run this console application. 我将MCR安装到另一台计算机上,并尝试运行此控制台应用程序。 I got the same result. 我得到了相同的结果。

I tried Loren's Vigenere example too, http://blogs.mathworks.com/loren/2011/02/03/creating-c-shared-libraries-and-dlls/#respond 我也尝试了Loren的Vigenere示例, http://blogs.mathworks.com/loren/2011/02/03/creating-c-shared-libraries-and-dlls/#respond

It didn't work either. 它也不起作用。

Do you have any idea why this is happening? 您知道为什么会这样吗?

Thanks 谢谢

It seems problem is MATLAB and Visual Studio version mismatch. 看来问题是MATLAB和Visual Studio版本不匹配。 If I use MatLab 2016a with Visual Studio 2013, there is no problem and everything works perfectly. 如果我将MatLab 2016a与Visual Studio 2013一起使用,则不会出现问题,并且一切运行正常。

I had the similar problem with Matlab2017 + VS 2015. Probably there is some conflict with java used by MATLAB. 我在Matlab2017 + VS 2015中也遇到了类似的问题。可能与MATLAB使用的Java存在一些冲突。

I've fixed it by using 我已经通过修复它

const char *args[] = {"-nojvm"};
const int count = sizeof(args) / sizeof(args[0]);
mclInitializeApplication(args, count))

instead of 代替

mclInitializeApplication(NULL,0)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM