2013-08-28 49 views
0

錯誤undefined reference to 'display_menu保持不變,我不知道爲什麼。我該如何解決這個錯誤? (未定義的參考'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 

這似乎很正確,但它不會編譯。幫幫我?

+0

你使用什麼編譯器? –

+5

你有編譯這兩個文件並鏈接在一起嗎? –

+0

你確定這是一個編譯器錯誤,而不是鏈接器錯誤?建議您發佈完整的錯誤消息。 – John3136

回答

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

相關問題