C 外部未定义引用
c extern undefined reference
我很抱歉我确定这是一个简单的错误。但是几个小时后,我无法弄清楚我做错了什么。我知道 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
你的理解有误。具有 extern
的变量不需要在函数中定义。但它必须在某处定义(可能是另一个源文件)。
示例:
main.c
:
extern double d;
int main(void) {
d = 0;
return 0;
}
d.c
:
double d;
编译:
gcc -o main main.c d.c
谢谢大家的评论。我的错误是假设 extern double d
以与 double d
相同的方式定义变量。但显然不是。
我会说这是一种 non-intuitive 属性 的语言,至少对于初学者来说是这样(例如 extern double
不是定义,但 static double
是).
根据你的评论,我发现了一个相关的问题,正是在讨论这个问题:Why is creating a variable using 'extern' a declaration and not a definition?
我很抱歉我确定这是一个简单的错误。但是几个小时后,我无法弄清楚我做错了什么。我知道 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
你的理解有误。具有 extern
的变量不需要在函数中定义。但它必须在某处定义(可能是另一个源文件)。
示例:
main.c
:
extern double d;
int main(void) {
d = 0;
return 0;
}
d.c
:
double d;
编译:
gcc -o main main.c d.c
谢谢大家的评论。我的错误是假设 extern double d
以与 double d
相同的方式定义变量。但显然不是。
我会说这是一种 non-intuitive 属性 的语言,至少对于初学者来说是这样(例如 extern double
不是定义,但 static double
是).
根据你的评论,我发现了一个相关的问题,正是在讨论这个问题:Why is creating a variable using 'extern' a declaration and not a definition?