我在c中制作了两个文件,即file1.c
file2.c
。在file1.c中我写了
#include< stdio.h >
int s=10;
void main()
{
printf("This is file 1");
}
在file2.c
中include < stdio.h >
extern int s;
void main() {
printf("%d",s);
}
当我在ubuntu终端编译file2.c时,我得到了undefined referenced
的错误。
如何解决此错误?
答案 0 :(得分:3)
在第二种情况下,
extern int s;
告诉编译器“某处某处”存在一个变量s
,其类型为int
,但它实际上并没有“定义”该变量。所以,链接器不知道在哪里找到变量,它找不到变量并抛出错误。
您需要在单独的翻译单元(使用extern
的目的)或相同的翻译单元(如果需要)中定义变量。
答案 1 :(得分:1)
在file1.c中
until ;
在file2.c
中#include <stdio.h>
void myfunction( void );
int s=10;
void myfunction()
{
printf("This is file 1");
}
然后编译(该示例使用#include <stdio.h>
void myfunction( void );
extern int s;
int main( void )
{
myfunction();
printf("%d",s);
}
gcc
然后链接使用:
gcc -g -Wall -Wextra -pedantic -Wconversion -std=gnu11 -c file1.c -o file1.o
gcc -g -Wall -Wextra -pedantic -Wconversion -std=gnu11 -c file2.c -o file2.o
然后将其作为
运行gcc -g file1.o file2.o -o myexec
当然,如果您使用Visual Studio,命令行语句会略有不同