【问题标题】:C - Undefined reference to function error with linked filesC - 未定义对链接文件的函数错误的引用
【发布时间】:2014-09-02 08:51:37
【问题描述】:

我开始实施一个大型程序。但是我遇到了一个大问题。所以这是我程序的非常简化的代码。我的函数有一个单独的 .c 文件,它是 normal.c 主程序是 ma​​in.c 并且我已将这两个与 cal.h 头文件。

main.c

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

void main()
{
    int num1, num2, ans;
    num1=5;
    num2=5;
    ans=add(num1, num2);
    printf("%d" ,ans);
}

正常的.c

#include "cal.h"

int add(int num1, int num2)
{
    return num1+num2;
}

cal.h

#ifndef CAL_H_INCLUDED
#define CAL_H_INCLUDED
#include <errno.h>

int add(int num1, int num2);

#endif // CAL_H_INCLUDED

但是当我编译它时,它给出了错误 ..\main.c|10|未定义对“添加”的引用|

我在 Windows 8.1 中使用 CodeBlocks v.13.12 对此问题的任何答案都非常感谢。我也尝试过使用 CodeLite,但发生了同样的错误。谢谢!

【问题讨论】:

  • 链接文件时,是否包含normal.o
  • 不,我没有。很抱歉,因为我是 C 新手,所以我不知道使用 .o 文件。解释将是一个很大的帮助!
  • 我不知道 CodeBlocks 是如何工作的,但这里通常是 C 编译的工作原理。每个 .c 文件分别编译为一个 .o 文件(“目标文件”)。所以你的main.c会被编译成main.o,而normal.c会被编译成normal.o。这些都不是可执行的,也不是完整的程序。然后,将两个目标文件链接在一起。在这种情况下,“链接”是一个技术术语,与您的使用不同——它是链接器执行的一个步骤。链接器生成您的实际可执行文件。通常 IDE 会自动链接同一项目中的任何 .c 文件。
  • 是的,我知道了,但这似乎没有链接这两个文件。否则,add 不能未定义。有什么建议可以解决这个问题?

标签: c function codeblocks undefined-reference


【解决方案1】:

需要在ubuntu终端中完整编译代码 使用以下

gcc normal.c main.c -o out -lm

【讨论】:

    【解决方案2】:

    代码块具有自动链接,但为此您需要将源文件和头文件放在项目下。

    我在制作单独的 .c 和 .h 文件并希望 IDE 链接目标文件时遇到了同样的问题,但它失败了。我把它们放在一个项目下,它奏效了!

    【讨论】:

      【解决方案3】:

      使用完整的代码编译。 如果您的 c 代码文件 main.c 和 normal.c 位于 ./src 中,而头文件 cal.h 位于 ./inc 中,请遵循当前 dir(.) 中的以下方法

      g++ ./src/main.c ./src/normal.c -I ./inc -o main

      现在 main 是要执行的二进制文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-12
        • 2013-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-13
        • 2011-01-24
        相关资源
        最近更新 更多