予防方法は、リンカーからの最適化を離れの起動時にコードについて教えてください。
-
18-09-2019 - |
質問
私は、以下の問題:私の(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リンカーが知っている
。所属していません StackOverflow