To anyone who is trying to compile the MEX files to run on a PC,
the following instructions, provided by Greg Lee on 2008-5-13, may help.


Hi Jeff,

Here are the details for the 2 things I had to change for Windows compilation
of the code needed for MRI reconstruction:

1.)  All of the interpolation table functions in the irt/nufft/table directory
use round() which apparently isn't in the C math library used by visual studio.
I got around this by defining round() near the top of each file:

#if defined(_WIN32)   /* allow Windows compilation */
double round(double x)
{
    return floor(x+.5);
}
#endif


2.)  I had to add a flag to disable the "Buffer Security Check" feature of Visual Studio before the code in irt/mex/src/ would compile.  I based my MEX configuration file off of MATLAB\R2007a\bin\win64\mexopts\msvc80opts.bat.  After changing the paths to point to add the free version of Visual Studio I have installed,  I had to add an additional compiler flag /GS- to disable this security check.  

More information on what this flag does can be found here:
http://msdn.microsoft.com/en-us/library/8dbf701c(VS.80).aspx

The relevant line with the GS option disabled is:
set COMPFLAGS=-c -Zp8 -GR -W3 -EHs -D_CRT_SECURE_NO_DEPRECATE -D_SCL_SECURE_NO_DEPRECATE -D_SECURE_SCL=0 -DMATLAB_MEX_FILE -nologo /GS-

The Matlab command I ran to observe the error was:
mex penalty_mex.c mexarg.c 'penalty,diff.c' -DIs_pc -DMmex -outdir ../v7

If the /GS- flag is not included, compilation fails during linking with the following output to the terminal:

Microsoft (R) Incremental Linker Version 8.00.40310.39 
Copyright (C) Microsoft Corporation.  All rights reserved. 
 
C:\DOCUME~1\greglee\LOCALS~1\Temp\mex_36736A54-B97E-49AC-00B2-5B8017F68171\penalty_mex.obj C:\DOCUME~1\greglee\LOCALS~1\Temp\mex_36736A54-B97E-49AC-00B2-5B8017F68171\mexarg.obj C:\DOCUME~1\greglee\LOCALS~1\Temp\mex_36736A54-B97E-49AC-00B2-5B8017F68171\penalty,diff.obj  
   Creating library C:\DOCUME~1\greglee\LOCALS~1\Temp\mex_36736A54-B97E-49AC-00B2-5B8017F68171\templib.x and object C:\DOCUME~1\greglee\LOCALS~1\Temp\mex_36736A54-B97E-49AC-00B2-5B8017F68171\templib.exp 
penalty_mex.obj : error LNK2019: unresolved external symbol __security_cookie referenced in function penalty_wk_mex 
mexarg.obj : error LNK2001: unresolved external symbol __security_cookie 
penalty,diff.obj : error LNK2001: unresolved external symbol __security_cookie 
penalty_mex.obj : error LNK2019: unresolved external symbol __security_check_cookie referenced in function penalty_wk_mex 
mexarg.obj : error LNK2001: unresolved external symbol __security_check_cookie 
penalty,diff.obj : error LNK2001: unresolved external symbol __security_check_cookie 
..\v7\penalty_mex.mexw64 : fatal error LNK1120: 2 unresolved externals 
 
  C:\PROGRA~1\MATLAB\R2007A\BIN\MEX.PL: Error: Link of '..\v7\penalty_mex.mexw64' failed. 

- Greg
