You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编译aarch64架构程序后仍报‘无法执行二进制文件’错误求助

编译aarch64架构的C/Fortran程序后无法执行二进制文件

我尝试用gcc和gfortran为aarch64架构编译一个C/Fortran混合程序,编译过程无报错,但生成的二进制文件gMultiwfn无法执行。用. gMultiwfn运行时提示bash: .: gMultiwfn: cannot execute binary file,切换到sudo环境执行同样失败。

我是Fortran和编译新手,网上搜的方案大多只说“确保为正确架构编译”,没找到具体解决办法。

编译通过Makefile完成,链接命令如下:

aarch64-linux-gnu-gfortran -O2 -fopenmp -ffree-line-length-none -cpp define.o util.o plot.o Bspline.o sym.o libreta.o function.o GUI.o sub.o integral.o Lebedev-Laikov.o DFTxclib.o edflib.o fileIO.o spectrum.o DOS.o Multiwfn.o 0123dim.o LSB.o population.o orbcomp.o bondorder.o topology.o excittrans.o otherfunc.o otherfunc2.o otherfunc3.o surfana.o procgriddata.o AdNDP.o fuzzy.o CDA.o basin.o orbloc.o visweak.o EDA.o atmraddens.o NAONBO.o minpack.o ean.o hrr_012345.o eanvrr_012345.o boysfunc.o ./dislin_d-11.5.a -lXm -lXt -lX11 -lGL -lblas -llapack -o gMultiwfn

编译生成.o文件的命令为:

aarch64-linux-gnu-gfortran -O2 -fopenmp -ffree-line-length-none -cpp -c [对应文件].f90

所有.o文件均为aarch64架构。

以下是调试命令输出:

$ file gMultiwfn
gMultiwfn: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, BuildID\[sha1\]=ef34baade8dbbfd9f99e970ebec8e7c6468368a2, for GNU/Linux 3.7.0, not stripped

$ ls -l gMultiwfn
-rwxrwxrwx 1 admin admin 8644192 Jun  8 12:54 gMultiwfn

$ uname -m
aarch64

$ objdump -i gMultiwfn
BFD header file version (GNU Binutils for Debian) 2.40

我试过用aarch64-linux-gnu-gfortran和aarch64-linux-gnu-gcc替代普通的gfortran和gcc,还是无法执行。


解决方向

1. 修正执行命令

. gMultiwfn是bash的source命令,用于加载脚本内容到当前shell,不是运行二进制文件的正确方式。正确执行方式为:

./gMultiwfn

若当前目录不在系统PATH环境变量中,必须通过./指定当前路径;若已将当前目录加入PATH,直接输入gMultiwfn即可。

2. 检查动态链接库依赖

架构匹配但可能缺少运行时依赖的动态库,用ldd命令排查:

ldd gMultiwfn

如果输出中出现not found的库,需安装对应aarch64版本的依赖包(比如链接命令中用到的libXm、libGL、libblas等)。

3. 禁用PIE编译尝试

你的二进制是PIE(位置无关可执行文件),若系统内核对PIE支持存在异常,可在链接命令中添加-no-pie参数重新编译:

aarch64-linux-gnu-gfortran -O2 -fopenmp -ffree-line-length-none -cpp -no-pie [所有目标文件和库] -o gMultiwfn

4. 验证编译环境一致性

  • 若为交叉编译(x86机器编译aarch64二进制):确保交叉工具链配置正确,所有链接的库(如dislin_d-11.5.a)均为aarch64版本。
  • 若为本地编译:尝试降低优化等级(比如-O0)重新编译,排除优化导致的兼容性问题;同时确认gfortran版本与系统内核版本匹配。

内容的提问来源于stack exchange,提问作者HippoProgrammer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 17:25:22