我的代码包含主程序和我链接的单独文件中的许多模块。目前我有一个makefile为每个模块创建.o文件(一个在单独的行上),然后我把它们放在一起,比如这里:
mpif90 - modutils
mpif90 -c modvarsym
mpif90 -c s1_Phi.f90
mpif90 -c s2_Lambda.f90
mpif90 maincode.f90 modutils.o modvarsym.o s1_Phi.o s2_Lambda.o -o maincode
以上编译正常并运行正常 - 除了我怀疑我怀疑我的变量中的数组绑定问题。所以我包括-fbounds-check maincode语句,例如:
mpif90 maincode.f90 modutils.o modvarsym.o s1_Phi.o s2_Lambda.o -o -fbounds-check maincode
当众多"多重定义"出现错误,代码将不再编译。我想这是因为-fbounds-check:而不是仅仅启用检查数组边界,它可能会做一些额外的检查。我还怀疑错误是在make文件中输入文件的方式。但是我找不到可行的方法。在这些文件中,modvarsym和modutils都由主代码和其他两个模块使用。主要代码使用所有四个模块。 这些文件中没有include语句。 Maincode是唯一带有program语句的文件,变量在modvarsym中只声明一次。总的来说,代码编译并运行时没有-fbounds-check。但是我真的想使用-fbounds-check来确保数组不会溢出。有人能让我走上正轨吗?谢谢。