x.h:
void f();
x.c:
void f(){}
main.c:
#include"x.h"
int main(){
f();
}
然后我使用:gcc -o a.out main.c 为什么说f是未定义的符号?
答案 0 :(得分:4)
这是一个链接器错误。您需要同时编译main.c
和x.c
,或者单独编译而不链接并链接生成的目标文件。
例如:
gcc -o x.o -c x.c
gcc -o main.o -c main.c
gcc -o myexecutable main.o x.o
答案 1 :(得分:1)
这是因为x.h
只包含一个声明,它不会定义一个符号。 x.c
包含定义。
尝试
gcc -o a.out main.c x.c
答案 2 :(得分:0)
您还必须在x.c文件中包含x.h,并确保以下代码未使用该定义两次:
#ifndef X_H
#define X_H
f();
#endif
然后使用gcc -o a.out main.c x.c
答案 3 :(得分:0)
由于f
中没有定义x.h
,因此只会声明它。您需要将x.o
链接到您的可执行文件中。如果您没有使用IDE,则可能需要设置Makefile
来处理此问题,并调用make
来构建项目。
答案 4 :(得分:0)
在编译期间应该这样说,但可能在链接期间。你还没有编译过x.c(gcc -c x.c)?