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

使用gfortran编译Fortran函数遇macOS版本不匹配及链接符号未定义报错

解决方案

你遇到的报错分为两类,对应修复方式如下:

1. 解决__gfortran_*系列符号未定义错误

这类错误是因为使用g++执行最终链接时,没有自动关联Fortran运行时库,二选一执行即可:

  • 方案1:在原链接命令末尾添加-lgfortran参数,手动链接Fortran运行时:
g++ main1.o test.o -o run -lgfortran
  • 方案2:直接用gfortran执行最终链接,gfortran会自动处理C++标准库的依赖:
gfortran main1.o test.o -o run

2. 解决hello_()符号未定义错误

该错误由C的名字修饰机制导致,需要在C代码中声明Fortran函数时添加extern "C"标记,避免C++修改函数符号名,正确声明示例:

extern "C" void hello_();

如果不想使用带下划线的函数名,可在Fortran函数定义中添加C绑定声明:

subroutine hello() bind(C, name="hello")
! 原有函数逻辑
end subroutine hello

修改后C++中直接声明extern "C" void hello();即可调用,无需加下划线后缀。

3. 可选:消除macOS版本不匹配警告

编译C++和Fortran代码时统一指定最低兼容系统版本即可,修改编译命令:

g++ -c main1.cpp -mmacosx-version-min=11.0
gfortran -c test.f95 -mmacosx-version-min=11.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:54:05