2016-05-15 12 views
0

gc-sections,ffunction-sectionsおよびfdata-sectionsを使用して実行可能ファイルを最適化しようとしています。また、リンカーに-u(未定義)のinit関数を与えます。私のinit関数と使用されているすべてのシンボルが追加され、使用されていない他のシンボルは正常に削除されます。全て大丈夫。gcc gc-sectionsオプションはcrtbegin/crtendオブジェクトを削除します

しかし、crtbegin,crtendのオブジェクトもgccによって削除されます。その場合、私の実行ファイルは動作しません... crtbegincrtendオブジェクトを実行可能ファイルに保存する方法はありますか?

注:これは解決されKEEP(*crtbegin.o(.ctors))KEEP(*crtbegin?.o(.ctors))

答えて

1

KEEP()ディレクティブなどcrtbeginリンカーに存在します。実行可能ファイルがクラッシュし、例外が発生しました。 gc-sectionオプションは__do_global_dtors_aux call__do_global_dtors_aux、frame_dummy、call_frame_dummyなどのcrtbegin関数を削除していたので、プログラムのクラッシュを引き起こします。

しかし、initセクションをリンカーに残しておくと: "KEEP(*(。init))"は、これらの関数は保持され、gc-sectionsオプションは未使用のシンボルをクリアします。その後、私のプログラムはクラッシュせずに正常に動作します。

関連する問題