使用gfortran编译安装xband8.6时遇类型不匹配等错误求助
解决XBAND 8.6安装时gfortran的类型不匹配错误
错误根源
编译findsym组件时,strdef.f文件第51行出现类型不匹配错误:传递给参数tau的是4字节整数(INTEGER(4)),但子程序/函数期望的是8字节实数(REAL(8)),直接导致编译终止。
具体解决步骤
修正
strdef.f的类型定义:
找到findsym目录下的strdef.f文件(路径应为/home/user/psharma/XBANDS/xband_8.6/findsym/strdef.f),定位到第51行:- 检查调用处的
tau变量定义:如果该变量被声明为整数类型(如integer或integer*4),将其改为实数类型(real*8或double precision); - 若子程序声明的
tau是实数,但传入的参数是整数,可在调用时添加类型转换,例如call subroutine_name(..., real(tau, kind=8), ...)。
- 检查调用处的
处理制表符警告(可选):
报错中的制表符警告是因为代码行首使用了制表符,不符合Fortran格式规范。虽然不影响编译,但建议用文本编辑器的“替换制表符为空格”功能批量处理,避免后续潜在问题。重新编译:
修改完成后,进入findsym目录执行make重新编译,编译成功后回到XBAND主目录继续安装流程。备选方案:切换兼容的gfortran版本:
XBAND 8.6属于旧版本,对新版本gfortran的严格类型检查兼容性较差。可尝试安装gfortran 5.x或6.x版本(例如Debian/Ubuntu系统执行apt install gfortran-5),通过update-alternatives --config gfortran切换到旧版本编译器后再尝试编译。
内容的提问来源于stack exchange,提问作者Poonam Sharma
相关产品推荐
相关产品推荐

