MATLAB Answers

1

Is it possible to build FORTRAN-only mex-files using GNU FORTRAN (gfortran) supplied with MinGW-w64 under Windows 10?

Asked by Bernt Nilsson on 7 May 2018
Latest activity Commented on by dpb
on 28 Sep 2018
Hello all,
I have a question about compiler support for Mex with Matlab R2018a under 64-bit Windows 10. We have a Matlab mex function that uses mixed C and FORTRAN source code. The mex gateway is written in C. Using the mingw-w64 compilers found as an Add-On in Matlab, this function compiles, links and works fine.
On the supported compilers page it is stated that the mingw-w64 C/C++ compilers are supported and that you can get them here: MinGW-w64 at the File Exchange. It is not stated that the GNU FORTRAN compiler (gfortran) is supported, but it is actually part of the distribution and the experience with our mixed C/FORTRAN mex-file above confirms that it works.
In the "Comments and Ratings" part of the MinGW-w64 page on the File Exchange the "Mathworks Supported Compilers Team" on 2017-07-18 said GNU FORTRAN is supported.
Now to my problem and question. I am trying to build a FORTRAN-only mex-file, but without success. It compiles fine, but when linking it fails. Furthermore, trying one of the supplied sample files, timestwo.F, doesn't work either. When compiling,
mex -c timestwo.F
I get:
Warning: Selected compiler 'MinGW64 Compiler (FORTRAN)' is not supported and no other supported compiler was found. For options, visit https://www.mathworks.com/support/compilers.
Building with 'MinGW64 Compiler (FORTRAN)'.
MEX completed successfully.
So mex reports that the compiler is not supported, even though it is said to be supported on the file exchange as per above. Also, the file is compiled and I get a timestwo.obj.
Trying to build the mex-file,
mex timestwo.F
I get:
Warning: Selected compiler 'MinGW64 Compiler (FORTRAN)' is not supported and no other supported compiler was found. For options, visit https://www.mathworks.com/support/compilers.
Error using mex
Cannot export mexFunction: symbol not defined
timestwo.obj:timestwo.F:(.text+0x43): undefined reference to `mexerrmsgidandtxt'
timestwo.obj:timestwo.F:(.text+0x69): undefined reference to `mexerrmsgidandtxt'
timestwo.obj:timestwo.F:(.text+0x71): undefined reference to `mxisnumeric'
timestwo.obj:timestwo.F:(.text+0x94): undefined reference to `mexerrmsgidandtxt'
timestwo.obj:timestwo.F:(.text+0x9c): undefined reference to `mxgetm730'
timestwo.obj:timestwo.F:(.text+0xa7): undefined reference to `mxgetn730'
timestwo.obj:timestwo.F:(.text+0xb9): undefined reference to `mxgetpr'
timestwo.obj:timestwo.F:(.text+0xd0): undefined reference to `mxcopyptrtoreal8730'
timestwo.obj:timestwo.F:(.text+0xe4): undefined reference to `mxcreatedoublematrix730'
timestwo.obj:timestwo.F:(.text+0xee): undefined reference to `mxgetpr'
timestwo.obj:timestwo.F:(.text+0x10f): undefined reference to `mxcopyreal8toptr730'
collect2.exe: error: ld returned 1 exit status
So my question is, is it possible to use the MinGW-w64 compiler with FORTRAN-only mex-files? It would (of course) be fantastic if it did, and I would be very grateful if someone could point me in the right direction.
Thanks for any input on this!
Bernt

  0 Comments

Sign in to comment.

1 Answer

Answer by Sid Jhaveri on 9 May 2018
 Accepted Answer

Hi Bernt,
Currently, MATLAB supports GNU FORTRAN only in Linux. MATLAB supports MinGW-w64 on Windows only for C/C++. For Windows, Intel Parallel studio XE and Intel Visual Fortran are supported Fortran compiler in MATLAB. For more information on supported compilers, you can visit https://www.mathworks.com/support/compilers.html

  4 Comments

Show 1 older comment
Hello,
I'm facing a similar issue but my MinGW-w64 compiler does not even recognise a FORTRAN compiler. I've installed Visual Studio 2017 and the Intel Parallel Studio XE 2017 For Fortran and MATLAB does not see them. Hopefully as you said someone would prepare a working mexopts XML-file. I'm wondering if your issue was resolved and if so, how you did it.
Thanks.
Hello,
My experience with this is still the same. gfortran bundled with mingw-w64 works fine as long as the mex gateway is written in C. I have not been able to build a FORTRAN-only mex-file with mingw-w64.
To have the FORTRAN part of a mixed C/FORTRAN mex-file work I used the XML-file for (mingw-w64) C and made "obvious" changes to it (like defining CC as gfortran instead of gcc etc) and a maybe not so obvious change (add "-fno-underscoring" to CFLAGS), and saved it to a new file. This file is then used with the -f switch of the mex-command.
On my computer gfortran.exe is found in the following folder:
C:\ProgramData\MATLAB\SupportPackages\R2018a\3P.instrset\mingw_w64.instrset\bin
It is strange that Matlab does not find your compilers. I have no answer for that. Depending on your version of Matlab you can use
cc = mex.getCompilerConfigurations('FORTRAN')
to find out more, but I imagine you have already "been there".
"MATLAB supports GNU FORTRAN only in Linux. MATLAB supports MinGW-w64 on Windows only for C/C++."
This is totally rude and an unacceptable situation.

Sign in to comment.