30

共有ライブラリまたは静的ライブラリとして構築できるC++ライブラリを使用しています。このライブラリは、プログラムの起動時に静的オブジェクトが登録され、静的オブジェクトが作成されるファクトリ手法を使用しています。

共有ライブラリが使用されている限り、これは正常に機能します。静的バージョンを使用すると、静的オブジェクトはいずれも最終プログラムに含まれず(直接参照されないため)、そのため、それらの機能は使用できません。

リンク時にライブラリからのすべての静的オブジェクトをgccに強制的に含める方法はありますか?

ライブラリはオープンソースであり、それが役立つ場合は変更できます。

4

2 に答える 2

31

を使用できます-Wl,--whole-archive -lyourlib。詳細については、マンページを参照しldてください。

コマンドラインの-Wl、-whole-archiveの後に記載されている静的ライブラリはすべて完全に含まれます。たとえば、必要に応じて、これを再びオフにすることもできます。-Wl,--whole-archive -lyourlib -Wl,--no-whole-archive -lotherlib

于 2011-01-22T13:05:26.993 に答える
2

使用する:

g++ -u <SYMBOL_NAME> ...

-uは小文字であることに注意してください

于 2018-09-27T23:14:57.810 に答える