予防方法は、リンカーからの最適化を離れの起動時にコードについて教えてください。

StackOverflow https://stackoverflow.com/questions/1300778

質問

私は、以下の問題:私の(C++)プロジェクトから複数のカテゴリ.それぞれにいくつかのファイルとコードに走りたいで起動します。私の溶液では静的変数を呼び、それぞれのコードに初期化このように:

// Foo.cpp

static TFooRegistry sFooRegistry;   // does stuff in constructor.

が私のプロジェクトを使用dllの各サブテーマ、すべての作品にはコードが実行されます。本サイトにリンクされる場合、カテゴリを静かにリンカーが判断しFoo.oを含まないコードも参照される外部からの適とができるので利用しています。もちろんのファンダメンタルズへの参照sFooRegistryどこか他の、あなたがるのが面倒なの誤に陥りやすい。

何標準conformant)の方法を解くことが要因であると認識しています。

OK、どうすりゃいいのmac/gccなど、win/visual studio?

役に立ちましたか?

解決

があconformant方を押しつけると作図するinitialisedする技によっては、各プラットフォームします。の違いはDLL、および静的ライブラリ(Windowsの場合、少なくとも) 元は、起動やシャットダウンコードで実行されるのOSであるのに対し、後者はんを連結した文字列オブジェクトファイルです。

また、リンカーは最適化しているほうがはるかを起のコードではなリンクまでだということがあります。配 い愚かな獣でご覧いただいた場合には、どういうこれらを実現するために、 図書 配&ローダー.

他のヒント

いくつかのトリックが、それを確認します。 獲得システムのため(ただし、Linux)の明示的なDLLEXPORTを使用 - この記号は、外部アプリケーションかによって使用されるこの場合doen'tリンカーが知っている

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top