私は静的ライブラリ(lib.a)とそれにリンクするプログラムを持っています。ライブラリには、それを使用する前に常に呼び出されるエントリポイントはありませんが、プログラムの早い段階でコードを実行する必要があります。だから自分のクラスの静的変数を使うと思った。リンカーは静的なlibをリンクするときオブジェクトファイルを省略できますか。
#include <MyClass.h>
static MyClass myVar;
MyClassのコンストラクタが私のコードを実行します。私がlib.aをリンクして "nm"を実行しようとすると、myVarがそこにあるという情報が得られます。しかし、自分のプログラムをリンクして "nm"を試してみると、myVarは表示されません。このコードを既存のファイルに入れると、シンボルは最終実行ファイルに表示されます。何故ですか?この場合、リンカはlib.aライブラリからオブジェクトファイルを省略できますか?私は変数が外部から参照されていないことを知っています(それは静的なものではありません)が、独自のコードを実行する必要があります。
場合によっては、古いSunProコンパイラを使用しています。
グローバル変数の初期化に依存するコードを記述するのは悪い考えです。どのようにしてより良いのか。 – ybungalobill
@ybungalobil:役に立つかもしれません。ユニットテストなどです。 (これは、ほとんどのC++ユニットテストフレームワークが自動テスト登録を処理する方法です)。 @トーマス:あなたはどのコンパイラ/プラットフォームを使用していますか? –
@Billy:それは役に立つかもしれませんが、多くても1つのコンポーネントだけがそれに依存しています。さもなければ、あなたは本当に悪いことを得ることができます(初期化順序は未定義です)。また、彼は "古いSunProコンパイラ"を使用していると書いています。 – ybungalobill