如何使用标题将多个c文件链接在一起?

时间:2019-01-26 22:54:43

标签: c header linker c-preprocessor main

我正在处理具有多个c文件的项目。每个c文件都有自己的标头。现在,我想将所有c文件放在一起。 作为准备,我尝试了以下操作:

这是我的示例c代码(function.c):

#include <stdio.h>
#include "function.h"

void output()
{
    printf("Thats a text\n");
}

多数民众赞成在关联的头文件(function.h):

//header function.h

#ifndef FUNCTION_H_
#define FUNCTION_H_

#endif // FUNCTION_H_

这就是我的main.c:

#include "function.h"

int main()
{
    output();

    return 0;
}

我希望获得以下输出:

“就是文本”

但是我只收到以下错误:

对“输出”的未定义引用

我在这里做错了什么?

非常感谢!

2 个答案:

答案 0 :(得分:2)

您的标头中需要prototype for output函数,以便在其他模块中可见。

//header function.h

#ifndef FUNCTION_H_
#define FUNCTION_H_

void output(void);

#endif // FUNCTION_H_

您需要link模块(源文件function.c)才能实际提供主模块使用的output的定义。

例如,您可以使用以下命令直接将其编译:

gcc main.c function.c -o my_out

您可能还想看看Makefiles

答案 1 :(得分:1)

您的标题应该是

//header function.h

#ifndef FUNCTION_H_
#define FUNCTION_H_
void output();

#endif // FUNCTION_H_

像这样编译: (实际标志可能取决于所使用的编译器)

cc -c main.c

(创建main.o)

cc -c function.c

(创建function.o)

cc main.o function.o

(创建a.out或您的系统默认值)

...或其他人提到的:

cc main.c function.c

(全部完成)