我有以下代码:
(1)extern_test.h:
extern int give_something;
(2)extern_test.c:
#include <stdio.h>
#include "extern_test.h"
int give_something = 10;
(3)extern_test2.c:
#include <stdio.h>
#include "extern_test.h"
int main()
{
printf("%i\n", give_something);
return 0;
}
现在当我在终端上编译extern_test2.c时,它说“未定义引用'give_something'”....请帮助为什么这不起作用..
答案 0 :(得分:0)
&#34;未定义参考&#34;意味着代码写很好,但是一旦编译完所有不同的文件并且有时间将它们链接在一起,其中一个文件没有#you>#39 ;寻找(在这种情况下,give_something
)。这称为链接器错误。
问题很可能是您没有为编译器使用正确的命令行 - 您尝试将extern_test.c
和extern_test2.c
编译为两个单独的二进制文件。因此,当您编译extern_test.c
时,它可以正常工作,但是当您尝试编译extern_test2.c
时,它无法找到该变量,因为它是在extern_test.c
中声明的。
假设您正在使用g ++,请使用以下命令行:
g++ extern_test.c extern_test2.c
注意它们是如何编译在一起的。有一些更高级的命令允许您将每个命令分别编译成目标文件,然后使用第三个命令将它们一起链接,但这不是必需的这里。