gpt4 book ai didi

fortran - 在 Julia 中集成 Fortran 代码

转载 作者:行者123 更新时间:2023-12-02 13:59:11 30 4
gpt4 key购买 nike

我正在为我自己的模块使用 GNU gfortran 编译器(在 Cygwin 上)。一个好的例子有望从编译阶段开始,解决损坏的名称并通过 ccall 从 Julia 调用子例程。我见过的大多数示例都跳过前两个阶段。

假设我在 Fortran 90 文件中有以下模块,名为“f90tojl.f90”:

module m
contains
integer function five()
five = 5
end function five
end module m

此示例来自here 。我使用 gfortran 对其进行编译,如下所示以创建共享库:

gfortran -shared -O2 f90tojl.f90 -o -fPIC f90tojl.so

从阅读 Julia 文档中我的理解(诚然是不稳定的)表明我应该能够像这样调用函数 5:

ccall( (:__m_MOD_five, "f90tojl"), Int, () )

这对我不起作用。我收到“编译匿名时出错:无法加载模块 f90tojl...。有人愿意启发我吗?我隐隐约约地感觉到我正在做一些愚蠢的事情......

在官方doc ,重点是C。我也知道this对于C++。在 R 和 Python 中,动力——我想到的是 Cython 和 Rcpp——似乎是 C/C++。类似这个question ,我想了解一下 Julia 与 Fortran 的接口(interface)与 Julia 与 C/C++ 的接口(interface)是多么容易。

最佳答案

正如文档所述,Fortran 和 C 的调用本质上是相同的。我想,例子要少得多,因为人们想要包装的代码要少得多。在 Julia 中包装 C 非常简单,非常令人愉快。它通常不是为了加快 Julia 的速度,就像使用 R 或 Python 一样,而是更多地为了利用已经编写的高质量代码。

Julia 的标准库本身就是与 Fortran 代码集成的一个很好的例子,例如这是Julia wrapper对于 ARPARK 。在 Base 之外,glmnet是用Fortran编写的,有一个Julia wrapper for it (GLMNet.jl) .

我不明白现代 Fortran 的区别有何重要。

关于fortran - 在 Julia 中集成 Fortran 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27498755/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com