问题描述
很抱歉我确定这是一个简单的错误。但是几个小时后,我不知道自己在做什么错。我了解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