2011-07-30 43 views
0

我在C中有一個多線程程序,它運行良好,但在一個main.cpp文件中。使用多個.cpp文件的多線程程序C

我已經移動了另一個.cpp文件中的線程,並添加了它的簽名,void * displayScreen(void *); ,在標題中。我將頭文件包含在最初的main.cpp文件中。

編譯的作品,但試圖調用pthread_create()時,鏈接器返回一個錯誤:未定義的引用`displayScreen(無效*)」

看起來它編譯displayScreen(無效*)的罰款,但不知道在哪裏加載它。有沒有辦法讓我告訴鏈接器在哪裏可以找到它,或者我做錯了嗎?

非常感謝。

+0

後您用來編譯命令和鏈接或這不能回答。 – bmargulies

+0

你的錯誤信息沒有任何意義 - 連接器不會「調用」函數。您是否記得在編譯目標中包含_both_對象文件? – Alnitak

回答

0

單獨添加簽名可以讓你編譯主要翻譯單元,但你還是要單獨編譯功能的實現和鏈接兩個:

的main.cpp

void* displayScreen(void*); 

int main() 
{ 
    /* .... */ 
} 

display.cpp

void* displayScreen(void*) 
{ 
    /* implementation */ 
} 

編譯:

g++ -O2 -o main.o main.cpp 
g++ -O2 -o display.o display.cpp 

鏈接:

g++ -o myprogram main.o display.o -lpthread -s 
+0

對不起,我犯了一個非常愚蠢的錯誤。我試圖編譯頭文件,.h,而不是.cpp代碼。我沒有注意到我的錯誤。抱歉! – Jary316