我在matlab中使用dll fortran时遇到问题。 我无法在matlab中使用由fortran构建的dll。我在matlab中使用“loadlibrary”指令,但错误与头文件有关。 什么是头文件? 请给我更多信息,在matlab中加载一个dll fortran并调用它。
答案 0 :(得分:4)
我建议您使用Matlab的MEX功能重新构建它,而不是尝试直接使用dll文件。是的,一个mex文件是一个dll,你可以在Matlab之外构建dll并成功使用它们,对于像我猜你这样的初学者来说,使用MEX要容易得多。更简单的一种方法是,如果你构建一个mex文件,系统不会要求你提供一个头文件,正如你所知,这是一个对Fortran程序员来说相当陌生的概念。 MEX使您的生活更轻松的另一种方式是,您可以直接从Matlab的命令行调用dll公开的函数,而无需loadlibrary。
研究有关MEX文件的Matlab文档,特别注意如何以这种方式集成Fortran。
答案 1 :(得分:1)
如果没有看到您在MATLAB中使用的头文件和命令行,这里很难帮助您。您可以reference the documentation in MATLAB which request that you pass two arguments to loadlibrary,第二个是带有功能签名的头文件。我猜你没有提供第二个论点。
答案 2 :(得分: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);
还有很多其他案例,但这就是它的要点。