汇报一下解决方法:
被C/C++调用的Fortran子程序要用bind(C,name='xxx')
主调的C/C++程序要用extern"C" void xxx()声明
然后先用mex编译fortran程序产生目标文件
mex -c f1.f90
再编译cpp文件和f1.obj
mex c1.cpp c2.cpp f1.obj
【 在 leshan 的大作中提到: 】
: 我有一个fortran子程序f1.f90,用来做数值计算,又编了个C++程序C1.cpp做内存管理和输入输出接口,并调用fortran程序计算,然后又用C++编了个mex接口程序C2.cpp。结果在matlab命令行下用mex同时编译这三个文件时被告知MEX不能同时编译C/C++和fortran程序。那么我先用mex编译fortran产生f1.obj目标文件,然后再用mex同时编译C1.cpp,C2.cpp和f1.obj,结果告诉我C1.cpp中调用fortran的函数找不到连接目标。C1.cpp中调用函数的名字是abc_(),有关键词extern "C"声明,而fortran中相应子程序的名字是abc()。请教一下版上众位matlab高手,如何解决问题?多谢了!!!
: 环境:win7 ultimate,matlab2017b,VS C/C++2015,intel Visual fortran2019
--
FROM 117.136.0.*