c外部未定义参考

问题描述

很抱歉我确定这是一个简单的错误。但是几个小时后,我不知道自己在做什么错。我了解extern需要在函数外部声明并在函数内部定义。但是我无法正常工作。

这是我的最小代码错误。

extern double d;
int main(void) {
    d = 0;
    return 0;
}
/home/0KzRYK/ccCTD3Lf.o: In function `main':
prog.c:(.text.startup+0x3): undefined reference to `d'
collect2: error: ld returned 1 exit status

解决方法

谢谢大家的评论。我的错误是假设PyObject以与extern double d相同的方式定义变量。但显然不是。

我会说这是语言的一种非直觉特性,至少对于初学者来说(例如double d不是定义,而extern double是)。

在您发表评论之后,我发现了一个相关的问题,正是这个问题:Why is creating a variable using 'extern' a declaration and not a definition?

,

您的理解是错误的。无需在函数中定义带有extern的变量。但是它必须在某个地方定义(也许是另一个源文件)。

示例:

main.c

extern double d;
int main(void) {
    d = 0;
    return 0;
}

d.c

double d;

编译:

gcc -o main main.c d.c

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...