
项目需要用到一个用 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 导致的? |