2

私が取り組んでいる c++ プロジェクトでは、プログラムの実行の開始時にいくつかのコードを実行する必要がある単純な c++ ファイルがあります。このファイルは静的ライブラリにリンクされ、メイン プログラムにリンクされます。

正常に実行されている他のファイルにも同様のコードがあり、次のようになります。

bool ____nonexistent_value = executeAction();

ただし、このファイルに実装されている関数を使用しない限り、このファイル内では機能しません。ライブラリが共有ライブラリとしてコンパイルされている場合は機能します。ファイルが別のディレクトリにあるため、ライブラリは便利なだけなので、これを静的にリンクすることをお勧めします。

更新 (解決策):

今のところ、静的ライブラリの代わりに共有ライブラリを作成すると、すべてが機能します。後で、すべてを静的ライブラリにリンクする方法を検討します。みんなの助けに感謝します!

4

3 に答える 3

2

その特定のファイルでシンボルが参照されていない場合、そのファイルはリンカーによってインクルードされません。次の 2 つのオプションがあります。

  1. ライブラリからファイルを削除し、それ (オブジェクトまたはソース ファイル) をコンパイル/リンク用のコマンド ラインに直接含めます。次に、ファイルを実行可能ファイルに含める必要があります。
  2. 他のファイル (たとえば、main() 定義のあるファイル) から参照するファイルにシンボルを含めると、リンク中にファイルが「プル」されます。
于 2010-06-17T21:07:05.427 に答える
1

静的ライブラリでそのような静的割り当てを保証する方法があるかどうかはわかりませんが、いつでも明示的にすることができます。必要なものすべてをセットアップするために main から呼び出されるライブラリの init 関数を提供します。このようにして、リンカーが明らかに使用されていないコードを省略しているなどのことを心配する必要はありません。

于 2010-06-17T20:29:49.950 に答える
0

静的初期化の保証された順序はありません。あなたはこれに非常に注意したいです!

于 2010-06-17T22:25:34.380 に答える