jojo9 发表于 2022-1-12 17:28:27

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.   
...
error #7002: Error in opening the compiled module file.Check INCLUDE paths.   
环境是 VS2010 + IVF 2013。不知道论坛的各位大大有遇到过类似情况吗?或者有啥排查方法、思路?

jojo9 发表于 2022-1-12 17:37:12

在release模式下,改为mod_B里 use mod1、mod2、mod3和mod_A,也是报同样的错

唐汉 发表于 2022-1-17 04:32:33

这取决于你的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:59

你的问题应该是Intel fortran个别情况下,不能正确的判断依赖关系。
你先手动编译 model_A 和 module_B 就行了。

jojo9 发表于 2022-1-17 15:42:07

唐汉 发表于 2022-1-17 04:32
这取决于你的debug和release里面都用了编译器的哪些flag,如果用了一些比较激进的优化类flag编译器是会改写 ...

感谢回复 :-D

jojo9 发表于 2022-1-17 15:42:52

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

感谢回复:-D我晚点试试
页: [1]
查看完整版本: debug能生成,release模式却会报错