【发布时间】:2013-09-13 17:11:05
【问题描述】:
我正在尝试混合一个由用 c 和 fortran 编写的文件组成的项目。 为了方便起见,我创建了这个简单的函数:
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;
}
使用英特尔 Fortran 编译器 (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 unresolved externals
此时我被卡住了,我不知道该怎么办。 我使用选项 /NODEFAULTLIB 是因为与 MSVCRT.lib 存在冲突。
我需要一些帮助。
【问题讨论】:
标签: fortran mex fortran-iso-c-binding