2016-07-31 3 views
1

nasm用の単純なライブラリを書く際に、実際に呼び出されたり参照されなかったラベルがバイナリに含まれていることに気付きました。参照コードブロックのみを含むnasmでアセンブル

nasmを使用してビルド/コンパイル/アセンブルするときに、オブジェクトに未使用のラベルと対応するコードを含めないようにする方法はありますか?

+0

'.label'を使用してローカルラベルを作成します。 YASMのデフォルトでは、出力のシンボルテーブルに非グローバルラベルは含まれません。 (デバッグ情報を出力するために '-gdwarf2'を使用すると、それらを含んでいます。)' strip'以外の通常のシンボルをシンボルテーブルに入れないようにNASMで行うことができるかどうかはわかりません。 –

+0

@PeterCordesシンボルだけでなく、シンボルが指すコードも含まれています。私はこれを行うためにいくつかのハックマクロに頼らなければならないかもしれないと思うが、私はむしろそうしたくない。 – Fluffy

答えて

2

このテクノロジは、すでに静的ライブラリの形式で存在しています。

すべての分離可能なコード+データグループを別々の.oに入れ、すべてのオブジェクト(arを使用)からスタティックライブラリ(.a)を構築します。

この静的ライブラリにリンクすると、依存関係を満たすために必要なオブジェクト(.oライブラリメンバー)のみが自動的にプルインされます。 (そして、AFAIK、これは再帰的に動作し、他のライブラリオブジェクトを引っ張って最初のオブジェクトセットの未解決シンボルを満たす)。

+0

参照されたシンボルを含むオブジェクトファイル( '.o'ファイル)のみを自動的に引き込むと言う方がいいでしょう。 –

+0

@RossRidge:ありがとう。私はそれを言うことを意味したが、編集後に私がしなかったことに気付かなかった!私はクイック検索で正確な重複は見つかりませんでした。 *静的ライブラリを作成する方法についてはいくつか質問がありますが、まだ質問が見つからない場所はありません。 TODO:良いライブラリー作成の答えの1つをリンクしてください。 –

関連する問題