3

pthread のバージョン (VC2、VCE2、VSE2) の違いを教えてください。Mongoose Web サーバー ライブラリの Visual C++ Express 2010 で使用する必要があるものを選択するにはどうすればよいですか?

ありがとうございました!!!

4

1 に答える 1

4
  • VCE - C++ 例外処理を備えた MSVC dll
  • VSE - 構造化された例外処理を備えた MSVC dll
  • VC - C クリーンアップ コードを含む MSVC dll

VC++ Express 2010 でどちらを使用するかは、pthread のクリーンアップをどのように処理するかによって異なります。これを Mongoose Web サーバー (私はよく知りません) にリンクしている場合は、そのコードがコンパイルされているので、例外処理モデルを使用することをお勧めします。

pthreads Win32 ライブラリは、かなり詳細に説明されています。

ライブラリの命名

ライブラリはさまざまな例外処理スキームとコンパイラを使用して構築されているため、アプリケーションにこれらが混在するとライブラリが確実に動作しない可能性があるため、ライブラリの異なるバージョンごとに独自の名前が付けられています。

注 1: 非互換性は、実際には異なるコンパイラの EH 実装間にあります。異なるコンパイラで構築された C++ アプリケーションで、いずれかのコンパイラの標準 C バージョンを使用できるはずです。ライブラリの EH バージョンを使用する場合は、アプリケーションに同じコンパイラを使用する必要があります。これは、標準の C ライブラリ バージョンのみを使用することで回避できる、もう 1 つの複雑さと依存関係です。

注 2: C++ アプリケーションで標準 C pthread*.dll を使用する場合、pthread_cleanup_push() 経由で呼び出されるように定義する関数はすべて __cdecl でなければなりません。

注 3: 意図は、VC または GC バージョン (任意である必要があります) のいずれかを pthread.dll として指定することであり、必要に応じて pthread.lib および libpthread.a を含みます。これはもう起こりそうにありません。

注 4: アプリケーションが libs と dll のバイナリ互換性のないバージョンを区別できるように、互換性番号が追加されました。

一般的に: pthread[VG]{SE,CE,C}c.dll pthread[VG]{SE,CE,C}c.lib

[VG] は、コンパイラ V - MS VC、または G - GNU C を示します。

{SE,CE,C} は、例外処理スキームを示します SE - 構造化 EH、または CE - C++ EH、または C - 例外なし - setjmp/longjmp を使用します

c - 同じ互換性番号を持つ任意のスナップショットに対して構築されたアプリケーションとの ABI および API の互換性を示す DLL 互換性番号。以下の「バージョン番号」を参照してください。

ライブラリのデバッグ バージョンを示すために、名前の末尾に「d」を付けることもできます。例: pthreadVC2d.lib。デバッグ バージョンには、デバッグ用の追加情報 (シンボルなど) が含まれており、多くの場合、最適化されていません (最適化をオフにしてコンパイル)。

例: pthreadVSE.dll (MSVC/SEH) pthreadGCE.dll (GNUC/C++ EH) pthreadGC.dll (GNUC/例外に依存しない) pthreadVC1.dll (MSVC/例外に依存しない - pthreadVC.dll とのバイナリ互換性なし) pthreadVC2.dll (MSVC/例外に依存しない - pthreadVC1.dll または pthreadVC.dll とバイナリ互換性がない)

それに応じて、GNU ライブラリのアーカイブ ファイル名が次のように変更されました。

libpthreadGCEc.a libpthreadGCc.a

これらの各クリーンアップ モデルの違いを知りたい場合は__CLEANUP、pthreads Win32 ソースで " " を検索してください (さまざまなクリーンアップ モデルが登場する場所はわずかしかありません)。

于 2010-12-20T22:27:05.760 に答える