0

私は、pthreads を使用してダイニング哲学者ソリューションを実装しようとしています。mingw インストール マネージャーを介してインストールされた Windows 用の pthreads があるにもかかわらず、Lenovo yoga2pro PC (Windows 8.1 で実行) で実行しようとしましたが、このエラーが発生しました。コードの一部に sleep() メソッドがある場合に発生します。

C:\Users\Anil\Desktop\Github>gcc dphi.c -pthread
C:\Users\Anil\AppData\Local\Temp\ccAxhsF4.o:dphi.c:(.text+0x185): undefined refe
rence to `sleep'
C:\Users\Anil\AppData\Local\Temp\ccAxhsF4.o:dphi.c:(.text+0x1de): undefined refe
rence to `sleep'
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: C:\Users\A
nil\AppData\Local\Temp\ccAxhsF4.o: bad reloc address 0x0 in section `.data'
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: final link
 failed: Invalid operation
collect2.exe: error: ld returned 1 exit status

sleep() メソッドを含まない別のファイルをコンパイルしようとすると。これは私が得るものです:

C:\Users\Anil\Desktop\Github>gcc dp.c -pthread
C:\Users\Anil\Desktop\Github>a.exe
Thread 1 says Hello!
Thread 2 says Hi!

それはうまく動作します。スレッドについてもっと学ぶためにこのコードを書き始めたところです。これは、食事の哲学者のソリューションをプロジェクトとして解決する方法を実装しようとしているためです。私は何を間違っているのかわかりません。(Windowsのpthreadsでこれをやろうとしている理由は、それが要件だからです)

4

2 に答える 2

1

単純なアプローチ:

#include <windows.h>
// Win32's Sleep() is in millis
#define sleep(n) Sleep(n*1000)
#define usleep(n) Sleep(n/1000)
于 2014-05-14T21:09:36.597 に答える
1

私が間違っていなければ、sleep()の一部でありunistd.h、そうではありませんpthread... Linuxの場合:追加

#include <unistd.h>

(必要に応じて対応するライブラリをリンクします)

Windows(あなたの場合)では、同等のものはわかりませんが、必要なインクルード(およびリンクされたライブラリ)がすべて揃っていることを確認してください

于 2014-05-14T21:05:41.253 に答える