在头文件中有一个结构

时间:2014-04-04 03:12:07

标签: c header-files

我正在使用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)

或者如果我从结构的文件报告中删除结构不可见和错误。

然后我在实现和示例测试文件中包含了头文件

2 个答案:

答案 0 :(得分:1)

您必须将整个程序链接在一起,否则您肯定会有许多未解决的符号。实现这一目标的一种方法是立即将所有源文件提供给编译器,另一种方法是编译目标文件,然后进行最后的链接步骤。

答案 1 :(得分:1)

头文件不是库。您需要在源文件中包含标头,以便编译器知道结构和函数的外观,但是在构建程序时,您需要编译实现库函数的代码和使用它们的代码。

通常,您只需构建一次库,然后多次使用它。例如,这就是C库所发生的事情。

因此,在最简单的情况下,您可以使用:

gcc -o program program.c header.c