GNU Fortran中'dcosd'函数报错:无隐式类型及未定义引用求助
问题解决:gFortran中
dcosd函数报错的原因与修复方案 核心问题分析
你遇到的两个错误本质都是类型不匹配和编译器/链接器对函数的识别问题:
- 带
implicit none时,编译器找不到dcosd的显式声明,因为你用单精度变量调用双精度函数,且未正确关联函数的类型; - 去掉
implicit none时,编译器默认推断dcosd为单精度函数,但gFortran中dcosd实际是双精度函数,导致链接时找不到对应符号。
直接修复方案
方案1:匹配dcosd的双精度类型
dcosd是双精度角度余弦函数,参数和返回值都要求双精度类型,修改代码如下:
program hello implicit none double precision :: x = 0.0d0 ! 用双精度类型定义变量 x = dcosd(x) write(*,*) x end program
方案2:改用单精度版本cosd
如果你不需要双精度精度,直接使用单精度的角度余弦函数cosd即可:
program hello implicit none real :: x = 0.0 x = cosd(x) ! 替换为单精度版本 write(*,*) x end program
额外配置(针对旧编译器版本)
Code::Blocks 20.03自带的MinGW中gFortran版本可能偏旧,而dcosd是Fortran 2008标准引入的函数,需要手动启用标准支持:
- 打开Code::Blocks,右键你的项目 → Build options
- 切换到Compiler settings → Other options
- 添加编译选项:
-std=f2008(或更高版本如-std=f2018) - 点击OK后重新编译项目
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

