使用fopen for file时,matlab在没有转储文件的情况下崩溃

时间:2015-02-12 06:06:14

标签: c++ matlab gcc mex mingw-w64

我正在使用gnumex和mingw在Windows操作系统中的matlab中编译mex文件。我无法使用fopen命令打开文件。以下是我正在使用的代码。

#include <stdio.h>
#include "mex.h"
void mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[])
{
    FILE  *fp=NULL;
    fp = fopen("test.txt", "w+");
}

程序成功编译但是当我尝试运行编译mexw64文件时,matlab只是关闭而不生成任何转储文件。

请注意,我可以运行简单的Hello world程序,并使用其他mex程序传递和接收参数。

Update1:​​添加flcose(fp)不会改变行为。

Update2:我无法使用http://www.mathworks.com/help/matlab/matlab_external/debugging-on-microsoft-windows-platforms.html进行调试,因为我正在使用mingw和windows中的gnumex设置进行编译

更新3:输出

mex -v file.cpp

 This is mex, Copyright 1984-2007 The MathWorks, Inc. 


-> Default options filename found in C:\Users\achaudhary\AppData\Roaming\MathWorks\MATLAB\R2009b 
---------------------------------------------------------------- 
->    Options file           = C:\Users\achaudhary\AppData\Roaming\MathWorks\MATLAB\R2009b\mexopts.bat 
      MATLAB                 = C:\PROGRA~1\MATLAB\R2009b 
->    COMPILER               = gcc 
->    Compiler flags: 
         COMPFLAGS           = -c -DMATLAB_MEX_FILE -x c++ 
         OPTIMFLAGS          = -O3 
         DEBUGFLAGS          = -g 
         arguments           =  
         Name switch         = -o 
->    Pre-linking commands   =  
->    LINKER                 = C:\PROGRA~1\MATLAB\R2009b\sys\perl\win32\bin\perl.exe E:\MATLAB~1\linkmex.pl 
->    Link directives: 
         LINKFLAGS           =   -mwindows -LC:\Users\ACHAUD~1\AppData\Roaming\MATHWO~1\MATLAB\R2009b\gnumex GM_ISCPP   -mwindows 
         LINKDEBUGFLAGS      = -g  -Wl,--image-base,0x28000000\n 
         LINKFLAGSPOST       =  
         Name directive      = -o file.mexw64 
         File link directive =  
         Lib. link directive =  
         Rsp file indicator  =  
->    Resource Compiler      = C:\PROGRA~1\MATLAB\R2009b\sys\perl\win32\bin\perl.exe E:\MATLAB~1\rccompile.pl --unix -o mexversion.res 
->    Resource Linker        =  
---------------------------------------------------------------- 


--> gcc  -c -DMATLAB_MEX_FILE -x c++ -oC:\USERS\ACHAUD~1\APPDATA\LOCAL\TEMP\MEX_FZ~1\file.obj -IC:\PROGRA~1\MATLAB\R2009b\extern\include -IC:\PROGRA~1\MATLAB\R2009b\simulink\include -O3 -DMX_COMPAT_32 file.cpp 


--> C:\PROGRA~1\MATLAB\R2009b\sys\perl\win32\bin\perl.exe E:\MATLAB~1\linkmex.pl -o file.mexw64   -mwindows -LC:\Users\ACHAUD~1\AppData\Roaming\MATHWO~1\MATLAB\R2009b\gnumex GM_ISCPP   -mwindows -s  C:\USERS\ACHAUD~1\APPDATA\LOCAL\TEMP\MEX_FZ~1\file.obj   

link command: g++ -shared C:\Users\ACHAUD~1\AppData\Roaming\MATHWO~1\MATLAB\R2009b\gnumex\mex.def -o file.mexw64 -mwindows -LC:\Users\ACHAUD~1\AppData\Roaming\MATHWO~1\MATLAB\R2009b\gnumex  -mwindows -s C:\USERS\ACHAUD~1\APPDATA\LOCAL\TEMP\MEX_FZ~1\file.obj -llibmx -llibmex -llibmat 

修改 我现在能够使用minGw,但问题仍然存在于cygwin。仍未找到使用cygwin的解决方案。

1 个答案:

答案 0 :(得分:1)

查看windgb调试器,发现mex文件也使用了早期安装的cygwin64库。为了使之前的安装工作,我不得不从gnumex手动生成的mexopts.bat中删除-mno-cygwin标志,因为它与安装的gcc版本不兼容。不知怎的,除了FILE以外的所有东西都有效。

因此,全新安装了mingw64并附加了环境路径。然后使用mingw64重新安装gnumex,现在一切都可以正常使用minGw。

注意:使用cygwin时问题仍然存在。