我该如何解决这个错误? (对'display_menu'的未定义引用)

时间:2013-08-28 06:42:22

标签: c compiler-errors

错误undefined reference to 'display_menu一直存在,我不知道为什么。

我的main.c是:

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

int main()
{
    display_menu();

    return 0;
}

我的care.c是:

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

void display_menu()
{

//some code defining display_menu

}

最后,我的care.h是:

#ifndef __CARE_H__
#define __CARE_H__


void display_menu();

#endif

看起来很正确,但不会编译。帮助

1 个答案:

答案 0 :(得分:2)

如果您有多个源文件,则需要编译并链接所有源文件。如果您使用的是IDE(例如VisualStudio,Eclipse等),则应由IDE处理。

如果您是从命令行进行编译,则必须自己执行此操作。

以GCC为例:

$ gcc -Wall main.c care.c -o my_example_program

上述命令将命令行上的所有源文件编译并链接到程序可执行文件my_example_program中。选项-Wall启用更多警告,这很好,因为许多警告可以提供有关可能在技术上合法但仍然做坏事的可能错误的提示。选项-o告诉GCC如何命名结果,在本例中为可执行程序。


您还可以分多步拆分,将每个源文件编译成目标文件,然后将所有目标文件链接到最终的可执行文件:

$ gcc -Wall main.c -c -o main.o
$ gcc -Wall care.c -c -o care.o
$ gcc main.o care.o -o my_example_program

选项-c是告诉GCC生成目标文件而不是可执行文件的选项。与之前一样-o是命名结果文件的名称,无论是对象文件还是可执行程序。

当你有很多文件时,最后一种方法会变得很麻烦,但有make之类的工具可以帮助解决这个问题。