① Matlab 2017b編譯生成exe或DLL文件後無法運行的問題及其解決方法
問題原因
出現此問題是由於Windows 的system32目錄下兩個DLL文件版本太低,這兩個文件是SSLEAY32.DLL和LIBEAY32.DLL。
這兩個文件在MATLAB安裝目錄的\bin\win64目錄下也有,\bin\win64這個目錄是在添加到了系統的PATH變數里了的。但是Matlab編譯後的exe程序在運行時,system32目錄有高的優先順序,會使用system32目錄下的這兩個文件,導致初始化錯誤,直接閃退。
解決方法
知道了此原因,有兩種解決方法:
(1)將Matlab的安裝目錄 \bin\win64下的SSLEAY32.DLL和LIBEAY32.DLL復制到windows的system32目錄下,覆蓋舊版本的文件。但是這樣可能導致使用這兩個DLL文件的其他程序出現問題。
(2)將Matlab的安裝目錄 \bin\win64下的SSLEAY32.DLL和LIBEAY32.DLL文件復制到自己編譯後的exe同目錄下,這樣exe文件在運行時就是找自己目錄下的這兩個DLL文件,而不會使用windows\system32目錄下的DLL文件。
---------------------
原文:https://blog.csdn.net/hongandyi/article/details/79427078
② 在MATLAB中用C語言編寫S函數時,怎麼生成動態鏈接庫(DLL)文件
在編寫好S函數的實現代碼*.c文件後,還需要在Matlab的命令輸出窗口中進行命令行輸入,完成對源代碼的編譯,這樣才能被S函數模塊所調用。在命令窗口中輸入命令:
「mex
-g
RandomTimeDelay.c」
M文件S-函數在MATLAB環境下可以通過解釋器直接執行,而C文件或其它語言編寫的C-函數,則需要先編譯成可以在MATLAB內運行的二進制代碼:動態連接庫或靜態連接庫,然後才可以使用,這些經過編譯的二進制文件就稱作MEX文件。用MEX命令來對*.c文件進行編譯,然後會在相應的目錄下生成對應的*.mexw32文件。然後就可以在simulink模塊中引用這個s函數了。