Ami*_*823 0 c linker-errors extern
谁能解释一下为什么是链接器错误?
假设该变量i未在任何其他文件中定义。
#include <stdio.h>
int main()
{
extern int i;
i=10;
printf("%d",i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
仅仅因为您已经说过 (extern) 变量是在其他地方定义的,但是您没有与包含变量定义的任何内容链接。
例子:
$ cat > main.c
#include <stdio.h>
int main()
{
extern int i;
i=10;
printf("%d\n",i);
}
$ cat > extern.c
int i;
$ gcc -c main.c
$ gcc -c extern.c
$ ls
extern.c extern.o main.c main.o
Run Code Online (Sandbox Code Playgroud)
所以现在我们已经将源文件编译为目标文件。让我们链接:
$ gcc main.o
/usr/bin/ld: main.o: in function `main':
main.c:(.text+0x6): undefined reference to `i'
/usr/bin/ld: main.c:(.text+0x10): undefined reference to `i'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
哎呀,没有用。但这确实:
$ gcc main.o extern.o
$ ls
a.out extern.c extern.o main.c main.o
$ ./a.out
10
$
Run Code Online (Sandbox Code Playgroud)
假设变量 i 未在任何其他文件中定义。
这是一个非常奇怪的假设,因为extern基本上意味着它是在另一个文件中定义的。你们都假设它是在另一个文件中定义的,而事实并非如此。这与在尝试打开不存在的文件时询问为什么会出现错误大致相同。如果你做出相互矛盾的假设,你应该会遇到一些麻烦,因为没有麻烦确实会很奇怪。:)