i have a problem to using a dll fortran in matlab. i couldn't use a dll ,that is built by fortran, in matlab. i use "loadlibrary" instruction in matlab but the error is related to header files. what is header files?? please give me more information to load a dll fortran in matlab and call it.
3 回答
与其尝试直接使用 dll 文件,我建议您使用 Matlab 的 MEX 功能重新构建它。是的,mex 文件是一个 dll,您可以在 Matlab 之外构建 dll 并成功使用它们,对于像我猜你这样的初学者来说,使用 MEX 会容易得多。一种更简单的方法是,如果您构建一个 mex 文件,系统不会要求您提供头文件,如您所知,这对于 Fortran 程序员来说是一个相当陌生的概念。MEX 让您的生活更轻松的另一种方式是,您可以直接从 Matlab 的命令行调用 dll 公开的函数,而无需加载库。
研究有关 MEX 文件的 Matlab 文档,特别注意如何以这种方式集成 Fortran。
如果没有看到您在 MATLAB 中使用的头文件和命令行,这里很难为您提供太多帮助。您可以参考 MATLAB 中的文档,该文档要求您将两个参数传递给 loadlibrary,第二个是带有函数签名的头文件。我猜你没有提供第二个论点。
您需要提供一个头文件,该文件定义您将要调用的 Fortran DLL 中的每个命名函数。例如,如果您的 DLL 包含一个名为的函数,该函数sum
将两个双精度变量相加,例如:
function sum(a,b) result(sum)
real(kind=2), intent(in) :: a, b
real(kind=2) :: sum
sum = a + b
end function
然后您的标题将需要包含以下内容:
double sum(double*a, double*b);
但是不要忘记使用特定于您的 Fortran 编译器的名称修饰来装饰它。例如,如果sum
在一个名为 的模块中foo
,并且您使用 gfortran 编译,那么您将需要类似以下内容:
double __foo_MOD_sum(double*a, double*b);
还有很多其他的案例,但这就是它的要点。