シングルスレッドv。マルチスレッド(およびLIBの命名規則)をコンパイルすることの重要性?

StackOverflow https://stackoverflow.com/questions/6316388

質問

編集] ==>明確にするために、複数のターゲットが同じディレクトリに展開されている環境では、Planet Earthが追加する条約を決定しました。d" また "_d" また "_debug"に"DEBUG「(ライブラリまたは実行可能ファイルの)バージョン。このような条約は、「ユビキタス」と「理解」と見なすことができますが、もちろん誰もがこれを行っているわけではありません。

同様に、ライブラリの「共有」バージョンと「静的」バージョンの間の曖昧さを解決するために、一般的な慣習は、静的と共有を区別するために何かを追加することです(」myfile.lib「共有Import-Lib-on-Windowsと」myfile_s.lib「static-import-lib on-windowsの場合)。Posixにはファイル拡張機能に基づいてこのあいまいさはありませんが、ファイル拡張機能は「リンクライン」で使用されていないことを忘れないでください。ライブラリの「静的」または「共有」バージョンを指定します。

この質問の目的のために、両方」debug/release" と "static/shared「に昇進します 「ファイル名ルートを飾るためのユビキタスコンベンション」.

質問: 他の展開構成は、ファイルターゲットルート名で明示されるように、このレベルの「ユビキタスコンベンション」に「促進」されますか?

私の現在の推測は「いいえ」です。回答が「はい」であるためには、指定されたターゲットの複数の構成が「使用」することを目的としています(したがって、質問の想定される根拠である共通ディレクトリに展開されます)。

過去には、「Webプラグイン」機能を使用してコンパイルしました。これは、同様にその名前の装飾が必要でしたが、それらのターゲットを構築しなくなりました(そのため、例としてそれを主張しません)。同様に、マルチバイトのキャラクターサポートでコンパイルすることもありますが、私はそれが嫌いなので、私もそれを主張しません。

元の質問

そうだった ライブラリの命名規則の確立/ポリシー、 言語とプラットフォームに合わせて適用されます (たとえば、C/C ++、C#、Javaなど、さまざまなプラットフォームでいくつかの言語を使用してハイブリッド製品をサポートしています)。特定の目標は、従来のデスクトップ(および組み込み)アプリケーションに加えて、モバイル開発のターゲット/リソース(私たちにとって新しい)を処理することです。

もちろん、 1 オプションは、異なるビルド構成からのターゲットの異なるパスを持つことです。この質問の目的のために、すべてのターゲットに単一のディレクトリに共同住宅化し、ビルド構成に基づいて衝突を回避するためにライブラリ/リソース/実行可能ファイル名を「飾る」ことが決定されます(例:「Debug」v。 「リリース」、「静的lib」v。「共有/dll」など)

現在の決定は、Web上の他の決定に似ており、衝突の命名を避けるためにトークンを追加します。

  MyName.lib           (release build, import for shared/dll)
  MyName_s.lib         (release build, static lib)

  MyName_d.lib         (debug build, import for shared/DLL)
  MyName_ud.lib        (Unicode/wide-char, debug, import for shared/DLL)
  MyName_usd.lib       (Unicode/wide-char, static lib, debug)

(上記はWindowsの例ですが、これらのポリシーも同様にPOSIXシステムに適用されます。)

これらは次のことです。

  d     (release or debug)
  u     (ASCII or Unicode/wide-char)
  s     (shared/DLL or static-lib)

質問: シングルスレッドをコンパイルする必要があるレガシーアプリケーションはありません。私の理解では、(Microsoftとは異なり)POSIXシステムは、単一およびマルチスレッドのターゲットを問題なく単一のアプリケーションにリンクできることです。マルチコアとマルチスレッドの今日のプッシュを考えると、 に必要なですか 大企業 「シングル」対「マルチスレッド」コンパイルされたターゲットを識別するために以下を確立するには?

  t       (single-threaded or multi-threaded)  *(??needed??)*

...そして、STL(C ++上)のコンパイルなど、他のターゲットの衝突を見逃しましたか?

余談ですが、Microsoftには次のようなライブラリの命名規則があります。http://msdn.microsoft.com/en-us/library/aa270400(v=vs.60).aspx と彼らのDLLの命名規則: http://msdn.microsoft.com/en-us/library/aa270964(v=vs.60).aspx

スレッドについて話せず、Microsoftの規則を参照しなかった1年前の同様の質問は、次のことを見つけることができます。 MSVC DLL、静的ライブラリ、インポートライブラリの適切な命名規則とは何ですか

役に立ちましたか?

解決

あなたは古代のコンパイラを使用しています。企業でこのような基準を確立する必要はありません。ベンダーはすでにこれを行っています。 Microsoftは、過去13年間、CRTのシングルスレッドバージョンを出荷していません。同様に、Windowsは過去17年間、Unicodeオペレーティングシステムでした。最近、Unicode Agnostic Codeをまだ書くことはゼロです。

しかし、はい、一般的な条約は、ライブラリのデバッグビルドに「D」を追加することです。ライブラリのDLLバージョンにまったく違う名前を付けること。

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