2016-06-16 7 views
0

私はキャッチ22にあるようです。私のプログラムはスレッドとセマフォを使用していますので、<semaphore.h>を含めましたが、struct timespecを使用したいので、<time.h>を含めました。Linux gcc <time.h>とスレッドを一緒に

セマフォ呼び出しが定義されるようにコンパイルフラグ-C99を追加する必要があるようです(そうでなければ、sem_post()のようにコンパイル警告を定義しません)。しかし、私がC99を定義するとき、struct timespecはもはや定義されていません!

何が定義またはコンパイラフラグは、私が一緒にCLOCK_REALTIMEsem_timedwait()を定義し、clock_gettime()などstruct timespecや機能を使用するように設定する必要がありますsem_post()sem_destroy()、など?

私はリンクステージにまだ参加していません。これはコンパイル時エラーです。

gccの使用4.4.7。

おかげで、 マイク

+0

'sme_post()'を定義するヘッダを見つけることはまずありません。 – EOF

+0

申し訳ありません - 間違った問題を指摘しました。私は-std = c99を持ってはいけませんでしたが、-pthreadと-lpthreadsでリンクしてください。複雑な私はclock_gettime()を呼び出すので、rtとリンクする必要もあります。私の最初の質問と私はそれを流した。マイク – Mike

+0

あなたがいません。質問を編集して改訂することはできますか? – khrm

答えて

0

あなたはsem_post()などのため-std=c99を必要としない - それらはPOSIX関数です。

clock_gettime()などとsem_post()などに必要なコマンドライン引数は、-lrtです。

+0

ありがとうございます。これは私のために働いた;コンパイルフラグ-std = c99を追加すると、コンパイルフラグ-pthreadが追加され、リンクlibs -lpthreadsおよび-lrtが追加されます。 – Mike