我正在使用clang编译器并试图将我的文件分成头文件,但是有两个问题,结构体是不可见的,或者有一堆从未包含的函数原型。
header.h
#ifndef GUARD
#define GUARD 1
struct A{
int b;
};
// some function prototypes
int blah(struct A* a);
#endif
然后我实现了它
header.c
和一个使用它的示例文件包含标题但是我得到了几个
的错误Undefined symbols for architecture x86_64:
"_blah", referenced from:
_main in main-Ghk6wa.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
或者如果我从结构的文件报告中删除结构不可见和错误。
然后我在实现和示例测试文件中包含了头文件
答案 0 :(得分:1)
您必须将整个程序链接在一起,否则您肯定会有许多未解决的符号。实现这一目标的一种方法是立即将所有源文件提供给编译器,另一种方法是编译目标文件,然后进行最后的链接步骤。
答案 1 :(得分:1)
头文件不是库。您需要在源文件中包含标头,以便编译器知道结构和函数的外观,但是在构建程序时,您需要编译实现库函数的代码和使用它们的代码。
通常,您只需构建一次库,然后多次使用它。例如,这就是C库所发生的事情。
因此,在最简单的情况下,您可以使用:
gcc -o program program.c header.c