① 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函数了。