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

gfortran编译受当前目录名为as的可执行文件干扰问题求证

问题原因与验证结论

这个问题的本质是Shell的PATH搜索优先级问题,不是gfortran本身的设计缺陷,不同环境是否复现完全取决于系统的PATH配置:

  • 若当前环境的PATH中,当前目录(.)的排序早于系统二进制路径(如/usr/bin、/usr/local/bin),必然会复现该问题。gfortran编译的汇编阶段需要调用系统自带的as汇编器,此时Shell会优先匹配到当前目录下的同名可执行文件,调用后无法生成有效的汇编目标文件,最终触发链接报错
  • 绝大多数主流Linux发行版、macOS的默认PATH配置不会将.加入PATH,或仅将其放在PATH末尾,这种场景下不会触发该问题
  • 不建议在PATH中优先配置当前目录,这类配置有极大的安全风险,也容易触发类似的工具调用冲突
原问题复现步骤

以下是在GNU Fortran (GCC) 11.1.0、macOS Big Sur 11.5.2环境下的复现操作:

lord@rabbit ~ % alias gf
gf='/usr/local/bin/gfortran '
lord@rabbit ~ % alias as
lord@rabbit ~ % more as.f

as.f代码内容:

program as

    print*,'this is program _as_ executing!'

    end

后续操作:

lord@rabbit ~ % ls -lt as
ls: as: No such file or directory
lord@rabbit ~ % gf -o as as.f
lord@rabbit ~ % ./as
this is program as executing!
lord@rabbit ~ % more hello.f

hello.f代码内容:

program helloworld

    print*,'hello'

    end

后续编译操作:

lord@rabbit ~ % gf -o hello hello.f
this is program as executing!
ld: file too small (length=0) file
'/var/folders/dz/qjjbfdzs663fd6jmv27hcz300000gn/T//cc4edAsr.o' for architecture x86_64
collect2: error: ld returned 1 exit status
lord@rabbit ~ % rm as
lord@rabbit ~ % gf -o hello hello.f
lord@rabbit ~ % ./hello
hello

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:39:02