2011-07-30 16 views
0

C言語でうまく動作していたが、1つのmain.cppファイルにあるマルチスレッドプログラムがあります。複数の.cppファイルを使用するマルチスレッドプログラムC

スレッドを別の.cppファイルに移動し、そのシグネチャを追加しました。void * displayScreen(void *); 、ヘッダーに。私は最初のmain.cppファイルにヘッダーを含めます。

作品をコンパイルするが、リンカがpthread_createの()を呼び出すようにしようとするとエラーを返します:罰金、それは(void *型)表示画面をコンパイルしたように見えます

表示画面(void *型)」 `への未定義の参照をが、どこ知りませんそれをロードする。リンカーにそれを見つける場所を教える方法がありますか、それとも間違っていますか?

ありがとうございました。

+0

ポストコンパイルに使用するコマンドおよびリンクまたはこれはお答えできません。 – bmargulies

+0

エラーメッセージは意味をなさない - リンカーは関数を "呼び出す"ことはありません。コンパイルされたターゲットに_both_オブジェクトファイルを含めることを忘れましたか? – Alnitak

答えて

0

だけで署名を追加すると、あなたはメインの翻訳単位をコンパイルすることができますが、あなたはまだ個別の機能の実装をコンパイルする必要がありとリンク 2:

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

関連する問題