Fortran Coder

标题: debug能生成,release模式却会报错 [打印本页]

作者: jojo9    时间: 2022-1-12 17:28
标题: debug能生成,release模式却会报错
求助论坛的各位大大,如题:
有一些基础的module,姑且称为mod1、mod2、mod3,然后写了两个module,姑且称为mod_A、mod_B,
关系上:mod_A需要use mod1、mod2、mod3;mod_B需要use mod1、mod2、mod3和mod_A。

程序是这么写的:
mod_A里 use mod1、mod2、mod3,
mod_B里 use mod_A,
主程序里 use mod_B,
mod_A和mod_B都能单独通过编译,在debug模式下能成功生成文件并执行,换到release模式就生成失败了,报错信息为:
error #7002: Error in opening the compiled module file.  Check INCLUDE paths.   [MOD_A]
...
error #7002: Error in opening the compiled module file.  Check INCLUDE paths.   [MOD_B]
环境是 VS2010 + IVF 2013。不知道论坛的各位大大有遇到过类似情况吗?或者有啥排查方法、思路?

作者: jojo9    时间: 2022-1-12 17:37
在release模式下,改为mod_B里 use mod1、mod2、mod3和mod_A,也是报同样的错

作者: 唐汉    时间: 2022-1-17 04:32
这取决于你的debug和release里面都用了编译器的哪些flag,如果用了一些比较激进的优化类flag编译器是会改写你的代码从出错的。比如说gfortran的"-ffast-math",官方文档里是这样写的“This option is not turned on by any -O option besides -Ofast since it can result in incorrect output for programs that depend on an exact implementation of IEEE or ISO rules/specifications for math functions.”所以这可能不仅仅是调用模块的问题,如果你要确保你的程序在一个比较激进的flag下也能得到正确的结果,你可能要在算法上检查一下。Intel的编译器我不算特别熟,但是类似的问题也会发生的,你可以参考一下这个intel社区的帖子
作者: fcode    时间: 2022-1-17 08:13
你的问题应该是Intel fortran个别情况下,不能正确的判断依赖关系。
你先手动编译 model_A 和 module_B 就行了。
作者: jojo9    时间: 2022-1-17 15:42
唐汉 发表于 2022-1-17 04:32
这取决于你的debug和release里面都用了编译器的哪些flag,如果用了一些比较激进的优化类flag编译器是会改写 ...

感谢回复
作者: jojo9    时间: 2022-1-17 15:42
fcode 发表于 2022-1-17 08:13
你的问题应该是Intel fortran个别情况下,不能正确的判断依赖关系。
你先手动编译 model_A 和 module_B 就 ...

感谢回复我晚点试试




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2