を使用して.cpp
ファイル(それを呼びましょうstatinit.cpp
)をコンパイルして実行可能ファイルにリンクしましたgcc
。私のmain()
関数はにありませんstatinit.cpp
。
statinit.cpp
実行する必要のある静的初期化がいくつかあります。ただし、statinit.cpp
自分のmain()
、またはそれによって参照されるものから何かを明示的に参照することはありません。何が起こるか(私は推測します)、から作成されたリンクオブジェクトstatinit.cpp
は実行時にロードされないため、静的初期化が実行されず、コードの他の場所で問題が発生します(デバッグは非常に困難でしたが、最終的にはトレースしました)。
標準ライブラリ関数、リンカーオプション、コンパイラオプション、またはその要素の1つを参照せずに実行時にそのオブジェクトを強制的にロードできるものはありますか?
私がやろうと思ったのは、statinit.cppでダミー関数を定義し、それを参照するヘッダーファイルで宣言し、main()
からそのダミー関数を呼び出すことmain()
です。ただし、これは非常に醜い解決策であり、statinit.cpp自体に変更を加えないようにしたいと思います。
ありがとう、ダニエル