MatLab C ++共享Dll库初始化崩溃

时间:2016-05-31 19:19:32

标签: c++ matlab dll crash matlab-compiler

我正在使用Matlab 2013a和Visual Studio 2013.我正在尝试使用来自C ++控制台应用程序的MatLab编译的dll。我的简单Matlab测试dll和控制台应用程序是为64位机器编译的(我确保它们是通过dumpbin的64位)。我的机器上也安装了正确版本的MCR(即使没有必要)。

我使用“mbuild -setup”命令设置我的编译器。

我使用以下命令行编译我的.m文件:“mcc -v -W cpplib:mylib -T link:lib myFunc”已成功。

在我的控制台应用程序中,我包含以下库:mylib.lib,mclmcrrt.lib,mclmcr.lib,libmx.lib,libmat.lib并使用此路径中的库“C:\ Program Files \ MATLAB \ R2013a \的extern \ lib中\ Win64的\微软“

当我调试我的程序时,它使用这个调用成功初始化MCR:“mclInitializeApplication(NULL,0)”但是当我调用“mylibInitialize()”以初始化我的库时,程序崩溃了。它甚至没有抛出一个axception因此我无法使用try / catch块来处理它。它给出了未处理的异常和访问vialoation错误消息。

这些是我得到的示例调试输出消息;

MatlabTest.exe中0x00007FFA22761F08的第一次机会异常:Microsoft C ++异常:内存位置0x000000E263EF4E48的xercesc_2_7 :: NoSuchElementException。

MatlabTest.exe中0x00007FFA22761F08的第一次机会异常:Microsoft C ++异常:内存位置0x000000E263EF4E40处的xsd_binder :: MalformedDocumentError。

MatlabTest.exe中0x00007FFA22761F08的第一次机会异常:Microsoft C ++异常:内存位置0x000000E263EF4E48的xercesc_2_7 :: NoSuchElementException。

MatlabTest.exe中0x00007FFA22761F08的第一次机会异常:Microsoft C ++异常:内存位置0x000000E2643FF630处的boost :: thread_interrupted。

MatlabTest.exe中0x00007FFA22761F08的第一次机会异常:Microsoft C ++异常:内存位置0x000000E2642FFCD0处的boost :: thread_interrupted。

MatlabTest.exe中0x00007FFA22761F08的第一次机会异常:Microsoft C ++异常:内存位置0x000000E264EFB0F0处的CryptoPP :: AES_PHM_Decryption :: InvalidCiphertextOrKey。

MatlabTest.exe中0x00007FFA22761F08的第一次机会异常:Microsoft C ++异常:内存位置0x000000E264EF4C10的tfFailedException。

MatlabTest.exe中0x00007FFA22761F08的第一次机会异常:Microsoft C ++异常:内存位置0x000000E264EF9410的varflowFailedException。线程0x3550已退出,代码为0(0x0)。 'MatlabTest.exe'(Win32):加载'C:\ Program Files \ MATLAB \ R2013a \ bin \ win64 \ hgbuiltins.dll'。无法找到或打开PDB文件。

MatlabTest.exe中0x0000000000B46E60(m_interpreter.dll)的第一次机会异常:0xC0000005:访问冲突读取位置0x0000000064EF3B90。 MatlabTest.exe中0x0000000000B46E60(m_interpreter.dll)的未处理异常:0xC0000005:访问冲突读取位置0x0000000064EF3B90。

程序'[12952] MatlabTest.exe'已退出,代码为0(0x0)。

我将MCR安装到另一台计算机并尝试运行此控制台应用程序。我得到了同样的结果。

我也尝试过Loren的Vigenere例子, http://blogs.mathworks.com/loren/2011/02/03/creating-c-shared-libraries-and-dlls/#respond

它也不起作用。

你知道为什么会这样吗?

由于

2 个答案:

答案 0 :(得分:0)

似乎问题是MATLAB和Visual Studio版本不匹配。如果我将MatLab 2016a与Visual Studio 2013一起使用,则没有问题,一切都运行良好。

答案 1 :(得分:0)

我遇到了与Matlab2017 + VS 2015类似的问题。 可能与MATLAB使用的java存在冲突。

我已经使用

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

而不是

mclInitializeApplication(NULL,0)