win系统下64位Julia链接fortran的方法

声明:综合网络上各位大佬的方法,实现了在win系统下64位Julia链接fortran。分步骤参考了大佬们的操作,文末黏贴了参考文献。整合为个人原创,转载请注明出处。相关参考也列在下部。第一次发文,不妥侵删。

1. 创建动态库(注意fortran源代码的特殊声明,以及生成dllx版本要和Julia版本相同,笔者为64位,因此用x64

2. Julia中用ccall语句

3. Julia中封装ccall

--------------------------------

主要工具:

Win,Julia 1.5.1,VS2019+IVF

具体操作步骤如下:

1. 创建动态库编译环境

首先新建一个空的Fortran Dynamic-link Library项目。在Intel(R) Visual Fortran点击Library,选中右图的Dynamic-link Library.然后点击OK.这时的项目如下所示:

 右键Sources File文件夹,添加(add),选择新建项。

 添加一个新的Fortran文件。

2. Fortran代码写入

写一个计算两数之和的函数,其中声明语句!DEC$ ATTRIBUTES DLLEXPORT :: 和!DEC$ ATTRIBUTES ALIAS:'MySum'::Mysum非常重要,参考的一个示例代码如下:

function MySum(x,y)
implicit none
!DEC$ ATTRIBUTES DLLEXPORT :: MySum
!DEC$ ATTRIBUTES ALIAS:'MySum'::Mysum
integer x,y,MySum
MySum=x+y
return
end function

3. 生成dll文件

关键操作一步,生成dll文件必须和Julia版本位数相同。若不同会出现如下报错:

ERROR: could not load library "C:\Users\dell\Desktop\test\Dll2\Dll2\Release\Dll2.dll"
%1 is not a valid Win32 application. 

关于这个报错解决办法有两种,网络已有解决方法是改装32位Julia。另一种就是生成64位dll库,具体生成方法如下:

首先,用VS打开之前的项目,这时候项目的平台是x86,如下图所示:

 点击x86,选择配置管理器--新建--键入或选择新平台,选择x64,其他默认:

选择生成--生成解决方案

编译运行即可生成64位的dll,只不过这次生成的dll不是在系统目录的Debug或者Release文件夹下,而是在一个x64文件夹下对应的DebugRelease文件夹下面。

4. Julia调用

Julia的documentation中给出的语句格式为:

ccall((function_name, library), returntype, (argtype1, ...), argvalue1, ...)

参照实例,调用语句为:

ccall((:MySum,"C:\\Users\\dell\\Desktop\\test\\Dll3\\Dll3\\x64\\Release\\Dll3.dll"),Int64,(Ref{Int64},Ref{Int64}),3,4)

第一个参数是一个元组,包含函数名和动态链接库的文件名。函数名为 Symbol 类型。

第二个参数是 Fortran 函数返回值的类型。

第三个参数是 Fortran 函数参数的类型,将所有传入参数的类型放到一个元组内。由于 Fortran 函数是传址调用,此处需要在原本的类型外加上 Ref{},调取参数的地址。此例中有两个参数,如果只有一个参数,则需要写成 (Ref{Int64},)。注意一定要带上逗号,仅仅用括号括起来不能构成一个元组。更多细节请查阅documentation。

最终结果如下:

5. Julia中封装ccall

1-4步基本已经实现了Julia中Fortran的调用。Julia官方建议对调用过程进行封装。该部分Julia 中调用 Fortran - 知乎 (zhihu.com)给出了参考样例,本文不再补充。

致谢:感谢Julia分享群中@一个人,@乱⑺⑧糟的指导建议。

参考文献(非常感谢这些分享,排名不分先后):

[1] Fortran 入门——C#调用Fortran DLL - xxfss2 - 博客园 (cnblogs.com)

[2] 使用VS在64位平台下编译代码,生成64位dll_邓无邪的博客-CSDN博客

[3] Julia 中调用 Fortran - 知乎 (zhihu.com)

[4] C#与Fortran混合编程之本地调用Fortran动态链接库 - Mr|Right - 博客园 (cnblogs.com)

[5] Fortran源程序生成动态链接库-百度经验 (baidu.com)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值