SPM/编译 gnumex mex 文件
外观
< SPM
SPM 维基教科书已移至 https://www.fil.ion.ucl.ac.uk/spm/docs/ |
如果提供的 shortpath.dll 和 uigetpath.dll 不起作用,可能是因为它们是针对旧版本的 Matlab 编译的。但源代码包含在内,因此您可以使用当前版本的 Matlab 重新编译,首先设置 mex,在 Matlab 提示符下键入
>> mex -setup
Matlab 会说
Please choose your compiler for building external interface (MEX) files: Would you like mex to locate installed compilers [y]/n?
所以选择'y',Matlab 然后列出可用的编译器
Select a compiler: [1] Lcc-win32 C 2.4.1 in C:\PROGRA~1\MATLAB\R2007a\sys\lcc [2] Microsoft Visual C++ .NET 2003 in C:\Program Files\Microsoft Visual Studio .NET 2003 [0] None Compiler:
注意:我安装了 Visual Studio 2003,这就是为什么我有 2 个选项。如果你安装了 Borland,你也将在上面看到它。
与 MinGW 和 Cygwin (gcc) 一起使用的编译器未列出,因为它没有像 Matlab、Visual Studio 等那样在 Windows 中注册。这就是使用 Gnumex 来设置 gcc 选项的原因。选择 [1] 使用与 Matlab 一起提供的编译器。
现在将目录更改为 c:\gnumex\src 并编译 .c 文件
mex shortpath.c -output shortpath.dll mex uigetpath.c -output uigetpath.dll
编译 uigetpath.c 时,您可能会遇到这样的错误
c:\docume~1\beau\locals~1\temp\mex_c58982ee-6281-4e1f-e2ac-723987a01052\uigetpath.obj .text: undefined reference to '_SHGetMalloc@4'
c:\docume~1\beau\locals~1\temp\mex_c58982ee-6281-4e1f-e2ac-723987a01052\uigetpath.obj .text: undefined reference to '_SHBrowseForFolder@4'
c:\docume~1\beau\locals~1\temp\mex_c58982ee-6281-4e1f-e2ac-723987a01052\uigetpath.obj .text: undefined reference to '_SHGetPathFromIDList@8'
C:\PROGRA~1\MATLAB\R2007A\BIN\MEX.PL: Error: Link of 'uigetpath.dll' failed.
??? Error using ==> mex at 206
Unable to complete successfully.
但幸运的是,uigetpath.dll 对于 Gnumex 的功能并不重要。我相信它只在按下“浏览”按钮时使用,向用户展示可浏览的文件夹树。为了避免使用它,只需在 Gnumex 的文本框中键入路径。当我使用 Visual Studio 编译器时,此错误不会出现,很可能是因为它的 mexopts.bat 文件已设置为正确链接到 Microsoft 库以用于列出的 _SH 函数。
现在您有了有效的 shortpath.dll(以及可能还有 uigetpath.dll),将它/它们复制到根 Gnumex 文件夹 (c:\gnumex)。