c と fortran で書かれたファイルで構成されたプロジェクトを mex しようとしています。簡単にするために、この単純な関数を作成しました。
mysum.f
SUBROUTINE mysum(a,b)
REAL :: a,b,r
r = a+b
WRITE(*,*) r
END SUBROUTINE mysum
およびtest.c
#include <mex.h>
#include <stdio.h>
extern void mysum(double *a, double *b);
double a,b;
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){
a =(double) mxGetScalar(prhs[0]);
b =(double) mxGetScalar(prhs[1]);
mysum(&a,&b);
return;
}
Intel Fortran Compiler (x64) を使用して、次を実行します。
ifort /c mysum.f
mysum.obj を作成します
Matlab (x64) では、Microsoft SDK をコンパイラとして使用しており、次のように記述しています。
mex -O -largeArrayDims LINKFLAGS="$LINKFLAGS /NODEFAULTLIB:MSVCRT.lib" test.c mysum.obj
残念ながら、次のエラーが発生します。
test.obj : エラー LNK2019: 関数 mexFunction で参照されている未解決の外部シンボル mysum test.mexw64 : 致命的なエラー LNK1120: 1 つの未解決の外部
この時点で私は立ち往生していて、何をすべきかわかりません。MSVCRT.lib との競合があったため、オプション /NODEFAULTLIB を使用しています。
助けが必要です。