シングルスレッドv。マルチスレッド(およびLIBの命名規則)をコンパイルすることの重要性?
-
26-10-2019 - |
質問
編集] ==>明確にするために、複数のターゲットが同じディレクトリに展開されている環境では、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バージョンにまったく違う名前を付けること。