I have successfully built/linked MATLAB mex files on Windows using GCC in
Cygwin. Unfortunately, it has a runtime error. It appears the error is due to
mismatched calling coventions for parameter passing. The MATLAB interpreter
successfully invokes the mexFunction() in my shared library (.mexw32), but the
passed parameters are "corrupted".
I've tried GCC's "attribute" to set the mexFunction() to "cdecl", "stdcall",
and "fastcall", but still no luck.
Anyone know the solution?
Details follow:
MATLAB mexopts.bat
=================
@echo off
rem Cygwin GCC on Windows
set MATLAB=%MATLAB%
set COMPILER=gcc
set COMPFLAGS=-mno-cygwin -D_WIN32 -shared -DMATLAB_MEX_FILE -Wall -c -msse3
-I"%ProgramFiles%\Pthreads\include" -I"%ProgramFiles%\Verasonics\Hal\Hal
C\Includes" -o%MEX_NAME%.obj
set OPTIMFLAGS=-O3
set DEBUGFLAGS=-g3
set LINKER=gcc
set LINKFLAGS=-mno-cygwin -D_WIN32 -shared -DMATLAB_MEX_FILE -nostartfiles
-L"%ProgramFiles%\Verasonics\Hal\Hal C\Shared Libraries" -lverasonicshalwindows
-L"%ProgramFiles%\MATLAB\R2007a\bin\win32" -lmat -lmex -lmx
set LINKOPTIMFLAGS=-s
set LINKDEBUGFLAGS=
set NAME_OUTPUT=-o%MEX_NAME%.mexw32
myMex.c
========
#include <mex.h>
#include <stdio.h>
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
//x
printf("We are not successfully passing parameters. We will be successful
when 'nlhs' is '1' and 'nrhs' is '0'. They are: %d and %d\n", nlhs, nrhs);
//x
// Return the result as a string.
plhs[0] = mxCreateString("Some text goes here");
return;
}
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Problem reports: http://cygwin.com/problems.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/