【问题标题】:How can I link multiple c-files together using headers?如何使用标头将多个 c 文件链接在一起?
【发布时间】:2019-01-26 22:54:43
【问题描述】:

我在一个有多个 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;
}

我希望得到以下输出:

“那是一段文字”

但我只收到以下错误:

对“输出”的未定义引用

我在这里做错了什么?

非常感谢!

【问题讨论】:

  • 为什么你的标题是空的?你如何编译和链接?
  • void output();放到你的头文件#define之后。这将为 other 文件(例如 main.c)所需的函数创建声明
  • 和一起编译你的文件cc function.c main.c -o main.

标签: c header linker c-preprocessor main


【解决方案1】:

您需要在标题中为output 函数添加prototype,以便它在其他模块中可见。

//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

【讨论】:

    【解决方案2】:

    你的标题应该是

    //header function.h
    
    #ifndef FUNCTION_H_
    #define FUNCTION_H_
    void output();
    
    #endif // FUNCTION_H_
    

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

    cc -c main.c
    

    (创建 main.o)

    cc -c function.c
    

    (创建函数.o)

    cc main.o function.o
    

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

    ...或其他人提到的:

    cc main.c function.c
    

    (什么都做)

    【讨论】:

      猜你喜欢
      • 2016-09-28
      • 1970-01-01
      • 1970-01-01
      • 2012-12-26
      • 2020-06-08
      • 1970-01-01
      • 1970-01-01
      • 2011-07-26
      • 1970-01-01
      相关资源
      最近更新 更多