MATLAB: Failed to call 64-bit MATLAB(2018a) from Intel Visual Fortran Code

fortranMATLABmatlab api

Hi all,
I tried to call MATLAB from visual Fortran, but failed. Could anyone tell me what to do to fix it? Thanks!
The environment is: 64bit win10; 64bit MATLAB2018a; Intel parallel studio XE 2017fortran + Microsoft visual studio 2017; Debug x64.
The output information in visual studio is:
1>—— Build started: Project: Console2, Configuration: Debug x64 ——
1>Linking…
1>libifcoremdd.lib(for_main.obj) : error LNK2019: unresolved external symbol MAIN__ referenced in function main
1>x64\Debug\Console2.exe : fatal error LNK1120: 1 unresolved externals
1>
1>Build log written to "file://C:\Users\Rui\FORTRAN\Console2\Console2\x64\Debug\BuildLog.htm"
1>Console2 – 2 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
The code in Fortran is actually an example (passstr.f) supplied by MATLAB
#include "fintrf.h"
C=====================================================================
#if 0
C
C passstr.F
C .F file needs to be preprocessed to generate .for equivalent
C
#endif
C
C passstr.F is an example for illustrating passing a character
C matrix from FORTRAN to MATLAB.
C
C It passes a string array/character matrix into MATLAB as output
C arguments rather than placing it directly into the workspace.
C
C Copyright 1984-2009 The MathWorks, Inc.
C
C=====================================================================
C Gateway routine
subroutine mexFunction(nlhs, plhs, nrhs, prhs)
C Declarations
implicit none
C mexFunction arguments:
mwPointer plhs(*), prhs(*)
integer nlhs, nrhs
C Function declarations:
mwPointer mxCreateString
integer mexCallMATLAB
C Pointers to input/output mxArrays:
mwPointer input(1)
integer status
mwSize i, m, n
character*75 thestring
character*15 string(5)
C-----------------------------------------------------------------------
C Create the string to be passed into MATLAB.
string(1) = 'MATLAB '
string(2) = 'The Scientific '
string(3) = 'Computing '
string(4) = 'Environment '
string(5) = ' by TMW, Inc.'
C Concatenate the set of 5 strings into a long string.
thestring = string(1)
do 10 i=2,5
thestring = thestring(:((i-1)*15)) // string(i)
10 continue
C Create the string matrix to be passed into MATLAB.
input(1) = mxCreateString(thestring)
C Set the matrix size to be M=15 and N=5.
m = 15
call mxSetM(input(1), m)
n = 5
call mxSetN(input(1), n)
C Transpose the resulting matrix in MATLAB because
C Fortran stores arrays as column major.
status = mexCallMATLAB(1, plhs, 1, input, 'transpose')
C Cleanup the un-freed memory after calling mexCallMATLAB.
call mxDestroyArray(input(1))
return
end

Best Answer

The error message tells you, that a main function is missing. The code starts with the gateway function mexFunction(nlhs, plhs, nrhs, prhs), but this is thought when calling a Fortran routine from Matlab, not the other way around. So if you really want to call Matlab from Fortran, start with writing a Fortran function at first, which does anything easy, a "Hello World" code. If this runs, care for adding the call to Matlab.