跳转到内容

SPM/编译 gnumex mex 文件

来自维基教科书,开放的书籍,用于开放的世界
< SPM

如果提供的 shortpath.dlluigetpath.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)。

华夏公益教科书