2

1つのソースファイルのmain()メソッドで、次のようにpthread_create()を呼び出します。

pthread_t pth_chanrecv;
pthread_create(&pth_chanrecv, NULL, chanrecv_run, NULL);

「chanrecv_run」は、私が書いた別のソースファイルの関数です。
これは関数プロトタイプです:

void *chanrecv_run(void *arg);

関数プロトタイプは、main()メソッドを含むソースファイルにインクルードしたヘッダーファイルにあります。

私は次のステートメントでプログラムをコンパイルしています:

gcc -lpthread -o bin/main2 src/main2.c

chanrecv_run()関数は、「chanrecv.c」という名前のファイルにあり、これもsrcフォルダーにあります。

コンパイルしようとするたびに、次のエラーが発生します。

/tmp/ccHxRSTk.o: In function `main':
main2.c:(.text+0x256): undefined reference to `chanrecv_run'
collect2: ld returned 1 exit status

何が悪いのかわかりません。pthread_create関数を使用して別のファイルにある関数を呼び出そうとしている誰かの別のインスタンスを見つけようとして、Webを精査し、完全に空白になりました。これも可能ですか?もしそうなら、どのように?

4

2 に答える 2

3

コンパイラがリンクを開始したときに使用できるようにするには、コンパイラ呼び出しに追加する必要があります。

gcc -Wall -o main2 main2.c chanrecv.c -pthread
于 2012-11-07T13:25:34.933 に答える
2

この問題は、pthreadに関連していません。関数を含む2番目の.cファイルをリンクしていないためchanrecv_run、リンカーはうめき声を上げています。

必要なもの:

gcc -lpthread -o bin/main2 src/main2.c src/file_with_chanrecv_run_in.c
于 2012-11-07T13:25:20.483 に答える