【问题1】
F90-S-0038-Symbol xxx,has not been explicitly declared (xxx.f)
在执行编译过程中,参数暂未明确声明

【根因分析】
排查发现此参数在源码内已有定义,预处理时忽略掉了定义的分支。即为预处理不到位导致。
识别到编译命令使用了macros_xxxx下的CPPFLAGS,但该预处理标志未声明该参数的宏,即BIT32。
【解决方案】
在源码makefile内添加-DBIT32,使之能够准确进入到参数定义的分支,完成预处理。

tips:使用毕昇编译器编译时请先配置FC标识,毕昇编译器对应使用flang,GCC编译器对应为gfortran
常规使用export在命令行下配置即可,但有时候需根据实际情况对makefile进行修改。
【问题2】
/usr/bin/ld: read in flex scanner failed
读取flex扫描仪失败

【根因分析】
观察命令得知此过程为链接过程,猜测为缺少修改链接文件所致,命令出现../此层目录,但进入该层目录下未找到任何库文件。
并且,在该层下查看makefile发现编译实际应指定的库文件为../$(LOCAL_LIBRARIES),但配置文件macros_xxxx内$(LOCAL_LIBRARIES)为空。

【解决方案】
修改最顶层makefile,给LOCAL_LIBRARIES赋予相应.a文件路径。

tips:
①对于链接问题,首先应检索到所链接的库是否指定正确&齐全,随后再进行下一步分析,检查生成的目标文件是否正确等。
②并行编译程序报错且无法准确定位问题时我们可以选择串行编译,有些应用不支持并行编译,强行编译会出错,这也是处理编译问题的一种办法。
【问题1】
F90-S-0038-Symbol xxx,has not been explicitly declared (xxx.f)
在执行编译过程中,参数暂未明确声明
【根因分析】
排查发现此参数在源码内已有定义,预处理时忽略掉了定义的分支。即为预处理不到位导致。
识别到编译命令使用了macros_xxxx下的CPPFLAGS,但该预处理标志未声明该参数的宏,即BIT32。
【解决方案】
在源码makefile内添加-DBIT32,使之能够准确进入到参数定义的分支,完成预处理。
tips:使用毕昇编译器编译时请先配置FC标识,毕昇编译器对应使用flang,GCC编译器对应为gfortran
常规使用export在命令行下配置即可,但有时候需根据实际情况对makefile进行修改。
【问题2】
/usr/bin/ld: read in flex scanner failed
读取flex扫描仪失败
【根因分析】
观察命令得知此过程为链接过程,猜测为缺少修改链接文件所致,命令出现../此层目录,但进入该层目录下未找到任何库文件。
并且,在该层下查看makefile发现编译实际应指定的库文件为../$(LOCAL_LIBRARIES),但配置文件macros_xxxx内$(LOCAL_LIBRARIES)为空。
【解决方案】
修改最顶层makefile,给LOCAL_LIBRARIES赋予相应.a文件路径。
tips:
①对于链接问题,首先应检索到所链接的库是否指定正确&齐全,随后再进行下一步分析,检查生成的目标文件是否正确等。
②并行编译程序报错且无法准确定位问题时我们可以选择串行编译,有些应用不支持并行编译,强行编译会出错,这也是处理编译问题的一种办法。