2012-03-07 13 views
1

私は、pthreadsを利用するVS2008で構築された小さなC++ Win32コマンドラインアプリケーションを持っています。私はスタンドアロンの実行可能ファイルとしてアプリケーションを配布したいので、静的にpthreadsにリンクしてください:プロジェクトプロパティのリンカー - >入力ページで、pthreadVC2.libを追加の依存関係に追加しました。プロジェクトはビルドされますが、libファイルに静的にリンクしているにもかかわらず、実行可能ファイルにpthreadVC2.dllが必要です。pthread static linking

Depends.exeは実際にpthreadVC2.dllを依存関係としてリストします。

これは何故でしょうか?おかげ

トム

答えて

4

あなたが静的にリンクする場合は、静的ライブラリにリンクする必要があります。 pthreadVC2.libファイルはスタティックライブラリではなく、DLLのスタブです。

静的ライブラリを使用するには、静的な添付ファイルの規則に従わなければなりません。たとえば、pthread_win32_process_attach_npを呼び出す必要があります。 Windows DLLスキームが通常あなたのために行うライブラリへの呼び出しを、プロセスアタッチ、スレッドアタッチ、スレッドデタッチ、およびプロセスデタッチで行う必要があります。

編集:バージョン2.9.0のよう

、静的ライブラリを使用して構築されたMSCやGCCのどちらかが、RTがどの意志 をフック含まれています。このステップでは、そのリンクの最新のマニュアルに従って、必要ではないかもしれません アプリケーションの起動/終了時に自動的にpthread_win32_process _ * _ npルーチンを呼び出します。

+0

です。説明ありがとう。 –

+0

なぜ、どうして彼らはAPIを変え続けるのですか?私はちょうど新しいmingwでプログラムをコンパイルしようとしました。そして 'pthread_win32_process_attach_np'は今では完全に欠けています... – vy32

+0

@ vy32:pthreadの[README](ftp://sourceware.org/pub/pthreads-win32/README)この関数とその仲間は "移植不可"です(したがって "win32")。それはおそらく彼らが明白に欠けている理由です。詳しい説明は[README.NONPORTABLE](ftp://sourceware.org/pub/pthreads-win32/prebuilt-dll-2-9-1-release/README.NONPORTABLE) – Isaac