2014-04-04 42 views
0

我使用了clang編譯器,並試圖將我的文件分離成頭文件,但是存在兩個問題:結構不可見或者存在一堆永遠不會包含的函數原型。在一個頭文件中有一個結構

header.h

#ifndef GUARD 
#define GUARD 1 

struct A{ 
    int b; 

}; 
// some function prototypes 

int blah(struct A* a); 

#endif 

我再有一個它的實現

header.c

和樣本文件中使用它,包括頭,但是我得到的幾個錯誤或者

Undefined symbols for architecture x86_64: 
    "_blah", referenced from: 
     _main in main-Ghk6wa.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

或者如果我從文件報告中刪除結構e結構不可見和錯誤。

然後我有頭文件中實施的情況和樣本測試文件

回答

1

你一定要聯繫在一起的整個程序,否則你肯定將有很多未解決的符號。一種方法是將所有源文件一次送入編譯器,另一種方式是編譯爲目標文件,然後進行最後的鏈接步驟。

+0

沒錯完全忘了這一點,而是認爲它是頭文件。 – Zimm3r

1

頭文件不是庫。您需要在源文件中包含頭文件,以便編譯器知道結構和函數是什麼樣的,但是在編譯程序時,需要編譯實現庫函數的代碼和使用它們的代碼。

通常您只需構建一次庫,然後多次使用它。例如,這就是C庫所發生的情況。

因此,在簡單的情況下,你可以使用:

gcc -o program program.c header.c 
相關問題