【问题标题】:"Undefined reference to function" error“未定义的函数引用”错误
【发布时间】:2012-06-30 20:16:12
【问题描述】:

我在使用标头编译一些文件时遇到了一些问题。这是我的代码的细分:

file1.c

#include "header.h"
int main() {
    func1();
    return 0;
}

file2.c

#include "header.h"
void func1() {
    ... function implementation ...
}

header.h

void func1();


我得到的错误是:

在函数'main':
'func1'的未定义引用

注意:我只是对我的 3 个文件的设置方式进行了简单的细分。我需要让它与 3 个文件一起使用。我正在正确设置/包括所有内容?我需要使用这个设置,但我只是不确定 file.c 如何引用 func1() 的实际实现。

【问题讨论】:

  • 你用的是什么编译器??你能提供你的编译器语句吗?
  • 如果您使用的是gcc -o program file2.c file1.c,请将其更改为gcc -o program file1.c file2.c。顺序很重要。
  • 嗯,你有权在正常的 gcc 编译下工作。问题是,这个问题更多来自一个非常大的项目,有数百个文件。但是问题的结构是一样的。我只是想也许我没有正确地包含东西,但我想情况并非如此。
  • 我刚刚用 gcc -- gcc -o test file2.c file1.c -- 在两个位置都使用了 file1.c 和 file2.c 进行了尝试。我想,还有其他事情正在发生。我在 Ubuntu 10.04 gcc 版本 4.4.3 (Ubuntu 4.4.3-4ubuntu5.1)
  • @H2CO3:AFAIK,顺序只对图书馆很重要。 IE。 libs (-lnameoflib) 应该使用它们的符号在源代码之后指定,如果存在 lib 间依赖关系,那么 libs 的顺序也很重要,或者必须使用分组选项(链接器然后进入组的循环, 直到所有引用都得到满足或无法解决。)

标签: c include compiler-errors


【解决方案1】:

如果错误是对func1() 的未定义引用,并且没有其他错误,那么我认为这是因为您的项目中有两个名为header.h 的文件和另一个副本包含在 func1() 声明中,而不是您的副本。

我会检查您项目的包含路径,并确保首先包含带有您声明的func1()header.h

【讨论】:

  • 这太老了,但我遇到了这个问题,我很感激帮助。基本设置与这个问题相同,除了我确定包含正确的标题,因为有些函数不提供未定义的引用,而有些则提供。这很奇怪,如果我危及标头,那么代码“正确”就无法编译。
猜你喜欢
  • 1970-01-01
  • 2014-04-19
  • 2017-02-27
  • 1970-01-01
  • 2022-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多