2

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.

4

3 回答 3

4

与其尝试直接使用 dll 文件,我建议您使用 Matlab 的 MEX 功能重新构建它。是的,mex 文件是一个 dll,您可以在 Matlab 之外构建 dll 并成功使用它们,对于像我猜你这样的初学者来说,使用 MEX 会容易得多。一种更简单的方法是,如果您构建一个 mex 文件,系统不会要求您提供头文件,如您所知,这对于 Fortran 程序员来说是一个相当陌生的概念。MEX 让您的生活更轻松的另一种方式是,您可以直接从 Matlab 的命令行调用 dll 公开的函数,而无需加载库。

研究有关 MEX 文件的 Matlab 文档,特别注意如何以这种方式集成 Fortran。

于 2010-02-17T14:32:43.933 回答
1

如果没有看到您在 MATLAB 中使用的头文件和命令行,这里很难为您提供太多帮助。您可以参考 MATLAB 中的文档,该文档要求您将两个参数传递给 loadlibrary,第二个是带有函数签名的头文件。我猜你没有提供第二个论点。

于 2010-02-17T13:19:59.340 回答
1

您需要提供一个头文件,该文件定义您将要调用的 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);

还有很多其他的案例,但这就是它的要点。

于 2011-10-18T19:24:46.957 回答