簡體   English   中英

MatLab C ++共享的DLL庫初始化崩潰

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

我正在使用Matlab 2013a和Visual Studio2013。我正在嘗試從C ++控制台應用程序使用MatLab編譯的dll。 我簡單的Matlab測試dll和控制台應用程序是為64位計算機編譯的(通過轉儲,我確保它們是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塊來處理它。 它給出了未處理的異常和訪問錯誤信息。

這些是我得到的示例調試輸出消息。

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 ++異常:boost :: thread_interrupt在內存位置0x000000E2643FF630。

MatlabTest.exe中0x00007FFA22761F08的第一次機會異常:Microsoft C ++異常:boost :: thread_interrupted在內存位置0x000000E2642FFCD0。

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

它也不起作用。

您知道為什么會這樣嗎?

謝謝

看來問題是MATLAB和Visual Studio版本不匹配。 如果我將MatLab 2016a與Visual Studio 2013一起使用,則不會出現問題,並且一切運行正常。

我在Matlab2017 + VS 2015中也遇到了類似的問題。可能與MATLAB使用的Java存在一些沖突。

我已經通過修復它

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

代替

mclInitializeApplication(NULL,0)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM