项目需要用到一个用 Fortran90 写成的物理计算模型,折腾了一星期才把这个项目编译通过(原项目是 exe 的);现在的问题是我的 VC++工程要调用这个模型,请问是生成库调用方便(看了相关资料 C++和 Fortran 互操作貌似也是个大坑),还是干脆移植到 C++方便?请大虾赐教!
项目需要用到一个用 Fortran90 写成的物理计算模型,折腾了一星期才把这个项目编译通过(原项目是 exe 的);现在的问题是我的 VC++工程要调用这个模型,请问是生成库调用方便(看了相关资料 C++和 Fortran 互操作貌似也是个大坑),还是干脆移植到 C++方便?请大虾赐教!
|
snnnJan 23, 2017 via Android
1
库。
重写算法不是那么容易的事情。数值算法很难验证是否没有 bug |
|
2
@snnn 问题是 fortran 的库调用限制很多: 1 , fortran 是传址的; 2 , fortran 变量必须是全大写且不能超过 31 个字符; 3 , fortran 数组的遍历顺序是列优先等等。
真的很佩服开发 FDS 库的这些人,都啥年代了还用这么远古的语言。 |
|
jarlyynJan 23, 2017 via Android
3
child process , stdin stdout 交互?
|
|
4
那个倒不至于,我有全部的 fortran 代码,可以直接调用原始接口,但是太蛋疼了。
@jarlyyn |
|
jarlyynJan 23, 2017
5
|
|
6
问题是以后还要改进这部分的代码,所以很痛苦。
@jarlyyn |
|
zmj1316Jan 23, 2017
7
有代码不错了,至少不是直接塞你一篇 paper 。。。我也建议不要移植,上库吧
|
|
herozhangJan 23, 2017
8
|
|
9
@herozhang
多谢。 |
|
10
|
|
lsmgeb89Jan 24, 2017
11
可以慢慢移植到 C++ 上, Fortran 不是长久之计。
|
|
lgsrJan 24, 2017
12
以前上学学的语言就是 fortran.可以编译成 lib 文件给 c 调用。注意传参传址,堆栈恢复
|
|
13
@lgsr 我现在调用 fortran 的 lib 里 subroutine 不成功,是不是没有在 module 里添加 iso_c_binding 导致的?
|