我有一個關於C編程語言的新手問題。我曾四處尋找類似問題的答案,但我未能弄明白。從另一個目錄中的源文件調用方法
假設一個由兩個目錄組成的簡單項目:src和test。源文件和頭文件由src/main.c,test/foo.h和test/foo.c定義。
SRC/main.c中:
#include "../test/foo.h"
int main (void) {
int a = VAR; /* works, recognizes declared macro */
some_function(a); /* doesn't work, "undefined reference" */
}
測試/ foo.h中:
#ifndef FOO_H
#define FOO_H
void some_function(int a);
#define VAR 2;
#endif
測試/ foo.c的(多餘的,但是完整的):
#include "foo.h"
#include <stdlib.h>
void some_function(int a) {
printf("%d", ++a);
}
我在Eclipse中創建了項目,並且我也編譯了它,我認爲它不是鏈接錯誤,因爲宏被識別,但該方法不可調用。
我之所以使用不同的目錄是因爲我有很多文件,並希望我的測試代碼與我的主要源代碼分開。請注意,src和test具有相同的父目錄。
任何想法這裏發生了什麼?我錯過了非常明顯的東西嗎?
任何幫助將不勝感激,在此先感謝!
編輯:我正在使用(Debian)Linux機器,Eclipse使用gcc編譯器。
edit2:感謝H2CO3的回答我知道這確實是一個鏈接錯誤。由於每次手動編譯和鏈接都是相當的開銷,我想知道是否有人知道如何教Eclipse來鏈接來自不同目錄的可執行文件?
--------------------- SOLUTION ---------------------
edit3:大聲笑的解決方案是非常容易的,畢竟,我只需要創建一個「新的源文件夾」而不是「新文件夾」。我感到很蠢,但是要感謝大家回覆,特別是H2CO3!
嘗試從'main.c' =>'#include「../test/foo.c中包含實際源文件「 – Cyclonecode
@KristerAndersson *** NO NO NO NO NO NOOOOOOO *** – 2013-10-14 20:50:29
@ H2CO3 - 這不行嗎? – Cyclonecode