【问题标题】:MatLab C++ Shared Dll Library Initialization CrashMatLab C++ 共享 Dll 库初始化崩溃
【发布时间】:2016-05-31 19:19:32
【问题描述】:

我正在使用 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\microsoft"

当我调试我的程序时,它使用以下调用成功地初始化了 MCR:“mclInitializeApplication(NULL, 0)”但是当我调用“mylibInitialize()”以初始化我的库时,程序崩溃了。它甚至不会抛出异常,因此我无法使用 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++ 异常:CryptoPP::AES_PHM_Decryption::InvalidCiphertextOrKey 在内存位置 0x000000E264EFB0F0。

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

也没有用。

你知道为什么会这样吗?

谢谢

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      我已经通过使用修复它

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

      而不是

      mclInitializeApplication(NULL,0)
      

      【讨论】:

      • 你会失去 Matlab 的 UI(从 C++ 调用它时你真的需要它们吗?),但无论如何它比访问冲突更好。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-04
      • 1970-01-01
      相关资源
      最近更新 更多