私はいくつかの依存関係コードが静的ライブラリである状況に遭遇しました。スタティックまたはグローバルスルーの複数のインスタンス
スタティックライブラリ "A"としましょう。 私はdll "B"を作っており、それは "A"にリンクしています。 実行可能ファイル "C"は両方にリンクしています。
I think this diagram is correct:
A static lib
/\
| B dll
\ \
\---C executable
"A"には、グローバル変数を使用するロガークラスが含まれています。それは、あなたの会社があなたに手を差し伸べるものの1つで、あなたはそれを見て、自分自身に、「ああ、何を混乱させるの?」と言います。
"A"のグローバル変数は、実行可能モジュールのコードをステップ実行しているのか、dllモジュールのコードをステップ実行しているのかによって、アドレスが異なります。
これはもちろん、予期しない方法でロガーを動作させます。
私は静的ライブラリがdllに一度コピーされ、実行可能ファイルにコピーされたと仮定しているので、実際にはすべての静的およびグローバルのコピーが2つあります。あれは正しいですか?
質問の2番目の部分は、このロガーをMeyerのシングルトンで問題を解決させるか、メソッドスコープ内の静的にも、どのモジュールから呼び出したかによって異なるアドレスを持つことになりますか?
また、動的にリンクする場合、いくつかのプロジェクトをすべて動的にリンクさせることは適切ですか?
@descherjmはい。それらはすべてVisual Studio 2015の同じソリューションの一部です。ソリューションには、すべてがリンクされている実行可能ファイルが1つあります。 –
グローバル変数をdllに入れることはできますか? – drescherjm
@dresherjm私の上司が満足する時間はありません。 –