【问题标题】:Getting 'undefined reference to' function although I have clearly included the files得到 \'undefined reference to\' 函数虽然我已经清楚地包含了这些文件
【发布时间】:2022-11-18 14:45:48
【问题描述】:

我有 3 个文件:

主程序

#include "fle.h"

int main(int argc, char **argv) {
     FILE *fptr = checkFile(argv[1]);
}

文件

#include "fle.h"

FILE *checkFile(char *path)
{
 ...
}

文件.h

#include <stdio.h>
#include <stdlib.h>

#ifndef FLE_H_
#define FLE_H_

FILE *checkFile(char *path);

#endif

我的生成文件看起来像这样

CC = gcc
CFLAGS  = -g -Wall
TARGET = main

all: $(TARGET)

$(TARGET): $(TARGET).c
    $(CC) $(CFLAGS) -o $(TARGET) $(TARGET).c

clean:
    $(RM) $(TARGET)

作为一个最小的(非)工作示例,它会抛出一个错误

/main.c:4: undefined reference to `checkFile'

我很好奇为什么 checkFile 函数左边是反引号,右边是撇号,看起来不对,但我认为这不是问题所在。

对于这个问题的任何帮助,我将不胜感激,这可能是微不足道的,但显然我没有足够的技能自己解决它。

编辑:我已经将名称从 file 重命名为 fle 以防止与系统库发生一些冲突,但它并没有改变任何事情。

【问题讨论】:

  • 想一想如果没有 makefile,您将如何编译它。你会使用什么命令?然后查看 makefile 并意识到根本没有对 fle.c 的引用。
  • 包括正确的标题永远不会帮助“未定义的引用”。你似乎混淆了什么。 (一个例外,如果你在标题中定义函数......不寒而栗)。
  • 感谢您的澄清。我希望构建过程会自动执行此操作,很高兴知道我还必须将其包含在 makefile 本身中。非常感谢!

标签: c


【解决方案1】:

当您包含声明时,您需要在定义中链接。最简单的方法是如下更改 Makefile:

CC = gcc
CFLAGS  = -g -Wall
TARGET = main

all: $(TARGET)

$(TARGET): $(TARGET).c file.c

clean:
    rm -f $(TARGET)

【讨论】:

  • “file.c”,“fle.c”,有人打错了。但我认为这实际上不是你的答案。 ;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-17
  • 2014-08-05
  • 1970-01-01
相关资源
最近更新 更多