3

pthreads を含むコードをコンパイルしようとすると、次のようなエラーが発生しました。

warning: return type defaults to 'int' [-Wreturn-type]|
|In function 'print_message_function':|
warning: control reaches end of non-void function [-Wreturn-type]|
| undefined reference to `_imp__pthread_create'|
| undefined reference to `_imp__pthread_create'|
| undefined reference to `_imp__pthread_join'|
| undefined reference to `_imp__pthread_join'|

Windows 7 で GCC を実行していますが、mingw がインストールされています。私は IDE Code::Blocks を使用しており、「現在のファイルをコンパイルする」を選択しています。これはリンカー設定のスクリーンショットです。ここで途方に暮れています

コードブロックリンカー

更新-pthread「その他のリンカーオプション」に追加したところ、よりうまく機能します。まだ問題があります。コンパイルすると、

|In function 'print_message_function':|
warning: control reaches end of non-void function [-Wreturn-type]|

CodeBlocks を実行すると、「プログラムはまだビルドされていないようです」と表示され、「ビルド」をクリックすると、このエラーが表示されます

mingw32-g++.exe  -o "SimpleExample.exe" "SimpleExample.o"  -static-libgcc -static-libstdc++ -pthread  
mingw32-g++.exe: error: unrecognized option '-pthread'
Process terminated with status 1 (0 minutes, 0 seconds)
0 errors, 1 warnings (0 minutes, 0 seconds)

これを修正するにはどうすればよいですか? Windows でビルド/テストしたいのですが、プログラムを Unix 環境で実行します。IDE でのコンパイルとビルドの違いは何ですか?

4

4 に答える 4

4

であり-lpthread、-pthread ではありません。

編集:ライブラリは、いくつかの方法でコンパイル行に追加できます。(たとえば) という名前のファイルがある場合、/usr/lib/libpthread.so次のようにファイルを含めることができます。

cc -o myprog /usr/lib/libpthread.so myprog.c

または、代わりに:

cc -o myprog -lpthread -L /usr/lib myprog.c

は標準のディレクトリであるため、通常はこのオプション/usr/libは必要ありません。-L実行時に、環境変数を設定する必要がある場合があります。

export LD_LIBRARY_PATH=/usr/lib

ただし、標準ライブラリはデフォルトで設定されているため、独自のライブラリを構築したり、サードパーティのライブラリを使用したりしない限り、これを使用する必要はありません。

于 2013-10-09T09:25:16.710 に答える
2

以下のパッケージがインストールされた Windows で MinGW インストール マネージャー (Windows 用の mingw32 パッケージ マネージャー) を使用すると、現時点で何が起こるかを次に示します。

  • mingw32-libpthreadgc-dll
  • mingw32-libpthreadgce-dll

エラー: gcc 5.3.0 は pthread のリンクに失敗します。

c:/mingw/bin/../lib/gcc/mingw32/5.3.0/../../../../mingw32/bin/ld.exe: cannot find -lpthread
collect2.exe: error: ld returned 1 exit status
Process terminated with status 1 (0 minute(s), 0 second

解決策: MinGW Package Manager からのソースも含めます。

  • mingw32-libpthreadgc-dev
  • mingw32-libpthreadgce-dev

MinGW 4.9.2 では、この効果は見られません。Ubuntu 上の GCC 5.4 では、コードをコンパイルするために pthread ソースも必要ありません。これは私を助けてくれましたが、他の試行 (mingw32-libpthread-old を使用するか、リンカー設定を構成する) は失敗しました。

于 2016-09-22T08:17:08.310 に答える
2
warning: control reaches end of non-void function [-Wreturn-type]|

あなたmainは値を返しません。return 0;の末尾に追加しmainます。

| undefined reference to `_imp__pthread_create'|

スレッド ライブラリとリンクする必要があります。-lpthreadリンカー コマンド ラインに追加します。

于 2013-10-09T08:43:06.687 に答える