私の静的C++ライブラリには、コンストラクタを持つグローバルオブジェクトがいくつか含まれています。テストプログラムはAppleのgcc 4.2.1でビルドされ、実行時にオブジェクトがゼロで初期化されているのがわかりますが、コンストラクタは呼び出されません。静的なクラスメンバー変数についても同様です。Mac OS Xの静的C++ライブラリへのリンク:ライブラリのグローバルオブジェクトコンストラクタが呼び出されない
-force_load
オプションをld
に指定することでこの問題を解決することは可能ですが、実行可能なサイズが大きいためにこの方法は良くありません。グローバルオブジェクトが定義されているファイルから関数を参照しようとしましたが、何の効果もありませんでした。
Linux(gcc 4.5.1)で同じコードをビルドする場合、そのような問題はありません。
どうやって最終リンクを作成していますか?例えば。 'gcc'、' g ++ '、' ld'とは? –
'g ++'を使用しています(したがって 'ld'が使用されます) – stkuzma