質問

VC2、VCE2、VSE2のPthreadバージョンの違いを教えてください。 Mongoose WebServerライブラリ用のVisual C ++ Express 2010で使用する必要があるそれらのどれを選択する方法は?

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

役に立ちましたか?

解決

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

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

pthreads win32ライブラリはかなりの詳細になります:

図書館の命名

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

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

注2:C ++アプリケーションを備えた標準c pthread*.dllを使用する場合、PTHREAD_CLEANUP_PUSH()を介して呼び出されることを意図した機能を定義する関数は__CDECLでなければなりません。

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

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

一般的に:pthread [vg] {se、ce、c} c.dll pthread [vg] {se、ce、c} c.lib

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

{se、ce、c}は、例外処理スキームse-構造化されたeh、またはce -c ++ eh、またはc -exching- setjmp/longjmpを示します。

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

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

例:pthreadvse.dll(msvc/seh)pthreadgce.dll(gnuc/c ++ eh)pthreadgc.dll(GNUC/例外に依存しない)pthreadvc1.dll(msvc/not onted ablet not a bindextions- pthreadvc.dllと互換性がない) pthreadvc2.dll(MSVC/例外に依存しない-PTHREADVC1.DLLまたはPTHREADVC.DLLと互換性がない)

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

libpthreadgcec.a libpthreadgcc.a

これらのクリーンアップモデルのそれぞれの違いを確認したい場合は、検索してください。__CLEANUP「pthreads win32ソースでは(異なるクリーンアップモデルが作用する場所はごくわずかです)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top