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