【问题标题】:using dll in matlab在matlab中使用dll
【发布时间】:2010-02-17 12:59:08
【问题描述】:

我在 matlab 中使用 dll fortran 时遇到问题。 我无法在matlab中使用由fortran构建的dll。我在 matlab 中使用“loadlibrary”指令,但错误与头文件有关。 什么是头文件?? 请给我更多信息以在 matlab 中加载 dll fortran 并调用它。

【问题讨论】:

    标签: matlab dll shared-libraries fortran loadlibrary


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      如果没有看到您在 MATLAB 中使用的头文件和命令行,这里很难为您提供太多帮助。你可能会reference the documentation in MATLAB which request that you pass two arguments to loadlibrary,第二个是带有函数签名的头文件。我猜你没有提供第二个参数。

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-06-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-08-02
          • 2016-07-21
          • 1970-01-01
          相关资源
          最近更新 更多