谁能告诉我这是哪个错误。链接器错误或编译器错误
Can anyone please tell me which error it is . linker error or compiler error
谁能解释一下为什么是链接器错误?
假设变量i
没有在任何其他文件中定义。
#include <stdio.h>
int main()
{
extern int i;
i=10;
printf("%d",i);
return 0;
}
只是因为您已经说过 (extern) 变量是在其他地方定义的,但是您还没有 link编辑任何包含变量定义的内容。
示例:
$ 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
现在我们已经将源文件编译成目标文件了。让我们 link:
$ 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
糟糕,没用。但这确实:
$ gcc main.o extern.o
$ ls
a.out extern.c extern.o main.c main.o
$ ./a.out
10
$
Assuming that the variable i is not defined in any other file.
这是一个很奇怪的假设,因为extern
基本上意味着它是在另一个文件中定义的。你们都假设它是在另一个文件中定义的,但事实并非如此。这与询问为什么在尝试打开一个不存在的文件时出现错误是一回事。如果你做出相互矛盾的假设,你应该预料到会遇到一些麻烦,因为没有麻烦确实是奇怪的。 :)
问题是您将变量 i
声明为 extern
,但您没有 link 任何具有变量 i
定义的变量。
进一步阅读:Extern C++
谁能解释一下为什么是链接器错误?
假设变量i
没有在任何其他文件中定义。
#include <stdio.h>
int main()
{
extern int i;
i=10;
printf("%d",i);
return 0;
}
只是因为您已经说过 (extern) 变量是在其他地方定义的,但是您还没有 link编辑任何包含变量定义的内容。
示例:
$ 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
现在我们已经将源文件编译成目标文件了。让我们 link:
$ 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
糟糕,没用。但这确实:
$ gcc main.o extern.o
$ ls
a.out extern.c extern.o main.c main.o
$ ./a.out
10
$
Assuming that the variable i is not defined in any other file.
这是一个很奇怪的假设,因为extern
基本上意味着它是在另一个文件中定义的。你们都假设它是在另一个文件中定义的,但事实并非如此。这与询问为什么在尝试打开一个不存在的文件时出现错误是一回事。如果你做出相互矛盾的假设,你应该预料到会遇到一些麻烦,因为没有麻烦确实是奇怪的。 :)
问题是您将变量 i
声明为 extern
,但您没有 link 任何具有变量 i
定义的变量。
进一步阅读:Extern C++