在Julia中集成Fortran代码

vat*_*mut 4 fortran julia

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

所以想象一下,我在Fortran 90文件中有以下模块名为'f90tojl.f90':

module m
contains
    integer function five()
      five = 5
    end function five
end module m
Run Code Online (Sandbox Code Playgroud)

这个例子来自这里.我用gfortran编译它如下创建一个共享库:

gfortran -shared -O2 f90tojl.f90 -o -fPIC f90tojl.so
Run Code Online (Sandbox Code Playgroud)

而且,通过阅读朱莉娅文档,我的,理所当然的不稳定的理解表明,我应该能够像这样调用函数五:

ccall( (:__m_MOD_five, "f90tojl"), Int, () )
Run Code Online (Sandbox Code Playgroud)

它对我不起作用.我得到'error compiling anonymous: could not load module f90tojl....有人关心开导我吗?我有一种偷偷摸摸的感觉,我正在做些傻事......

在官方文档中,重点是C.我也知道C++ 的这个.在R和Python中,动力 - 我想到了Cython和Rcpp--似乎是C/C++.与此问题类似,我想了解使用C/C++将Julia与Fortran与Julia联系起来是多么容易.

Iai*_*ing 8

正如文档所述,调用Fortran和C基本相同.我想,只有很少的例子,因为人们想要包装的代码要少得多.在Julia,包裹C非常容易,非常愉快.它通常不是为了加速Julia,就像使用R或Python一样,但更多的是利用已编写的高质量代码.

Julia的标准库本身是用Fortran代码整合的一个很好的例子,比如这里是朱莉娅包装ARPARK.之外Base,glmnet是Fortran语言编写的,并有一个朱莉娅包装它(GLMNet.jl) .

我不知道现代Fortran的区别如何重要.


Gab*_*ele 5

对于那些像我一样希望通过复制粘贴秘方来解决问题的人来说,这里有一个工作代码(来自http://julia-programming-language.2336112.n4的拼写错误更正)。 nabble.com/example-for-ccall-use-and-fortran-tp7737p7740.html)。

Fortran 文件:simplemodule.f95

module simpleModule

contains
function foo(x)
  integer :: foo, x
  foo = x * 2
end function foo


end module simplemodule
Run Code Online (Sandbox Code Playgroud)

必须使用 进行编译 gfortran simplemodule.f95 -o simplemodule.so -shared -fPIC,生成simplemodule.so共享库文件。

然后,在朱莉娅那里,

a = Int32[3]
ccall((:__simplemodule_MOD_foo, "./simplemodule.so"), Int32, (Ptr{Int32},), a)
Run Code Online (Sandbox Code Playgroud)

返回6

线程还包含其他示例。