STRIP

Section: GNU Development Tools (1)
Updated: 2025-09-17
Index JM Home Page roff page
 

名前

strip - オブジェクトファイルからシンボルやその他のデータを削除  

書式

strip [-F bfdname |--target=bfdname]
      [-I bfdname |--input-target=bfdname]
      [-O bfdname |--output-target=bfdname]
      [-s|--strip-all]
      [-S|-g|-d|--strip-debug]
      [--strip-dwo]
      [-K symbolname|--keep-symbol=symbolname]
      [-M|--merge-notes][--no-merge-notes]
      [-N symbolname |--strip-symbol=symbolname]
      [-w|--wildcard]
      [-x|--discard-all] [-X |--discard-locals]
      [-R sectionname |--remove-section=sectionname]
      [--keep-section=sectionpattern]
      [--remove-relocations=sectionpattern]
      [--strip-section-headers]
      [-o file] [-p|--preserve-dates]
      [-D|--enable-deterministic-archives]
      [-U|--disable-deterministic-archives]
      [--keep-section-symbols]
      [--keep-file-symbols]
      [--only-keep-debug]
      [--plugin name]
      [-v |--verbose] [-V|--version]
      [--help] [--info]
      objfile...  

説明

GNUstrip は、オブジェクトファイル objfile からすべてのシンボルを削除します。オブジェクトファイルのリストには、アーカイブも使えます。 少なくとも 1つのオブジェクトファイルを指定する必要があります。

strip は、引数で指定されたファイルを変更します。変更されたコピーを別の名前で書き込むのではありません。  

オプション

-F bfdname
--target=bfdname
元の objfile をオブジェクトコード形式 bfdname のファイルとして扱い、同じ形式に書き直します。 Xrefなので削る
--help
strip のオプションの概要を表示して終了します。
--info
使用可能なすべてのアーキテクチャとオブジェクトフォーマットを示すリストを表示します。
-I bfdname
--input-target=bfdname
元の objfile をオブジェクトコード形式 bfdname のファイルとして扱います。 Xrefなので削る
-O bfdname
--output-target=bfdname
objfile を出力形式 bfdname のファイルに置き換えます。 Xrefなので削る
-R sectionname
--remove-section=sectionname
sectionname という名前のセクションを、本来ならば削除されるセクションに加えて、出力ファイルから削除します。このオプションは、複数回指定できます。このオプションを不適切に使用すると、出力ファイルが使用できなくなる可能性があることに注意してください。ワイルドカード文字 * は、sectionname の最後に指定できます。その場合、 sectionname で始まるセクションはすべて削除されます。

sectionpattern の最初の文字が感嘆符 (!) の場合、同じコマンドラインで以前に--remove-section を使用して削除されたとしても、一致するセクションは削除されません。たとえば以下のようなものです:

          --remove-section=.text.* --remove-section=!.text.foo

パターン '.text.*' に一致するすべてのセクションが削除されますが、セクション '.text.foo' は削除されません。

--keep-section=sectionpattern
出力ファイルからセクションを削除する場合は、sectionpattern と一致するセクションを保持します。
--remove-relocations=sectionpattern
sectionpattern に一致するセクションの出力ファイルから再配置情報を削除します。このオプションは複数回指定できます。このオプションを不適切に使用すると、出力ファイルが使用できなくなる可能性があることに注意してください。sectionpattern では、ワイルドカード文字を使用できます。 たとえば以下のようなものです:

          --remove-relocations=.text.*

パターン 「.text.* 」に一致するすべてのセクションの再配置情報を削除します。

sectionpattern の最初の文字が感嘆符(!)の場合、同じコマンドラインで以前に --remove-relocations を使用したときに再配置が削除されたとしても、一致するセクションの再配置は削除されません。 たとえば以下のようなものです:

          --remove-relocations=.text.* --remove-relocations=!.text.foo

パターン '.text.*' に一致するセクションの再配置はすべて削除されますが、セクション '.text.foo' の再配置は削除されません。

--strip-section-headers
セクションヘッダを削除します。このオプションは ELF ファイルに固有です。--strip-all--merge-notes を意味します。
-s
--strip-all
すべてのシンボルを削除します。
-g
-S
-d
--strip-debug
デバッグシンボルのみ削除します。
--strip-dwo
すべてのDWARF.dwo セクションの内容を削除し、残りのデバッグセクションとすべてのシンボルはそのままにします。 詳細については、 objcopy セクションのこのオプションの説明を参照してください。
--strip-unneeded
--strip-debug によって除去されたセクションとデバッグシンボルに加えて、再配置処理に不要なすべてのシンボルを削除します。
-K symbolname
--keep-symbol=symbolname
シンボルを除去するときは、通常除去される場合でも、シンボル symbolname をそのままにします。このオプションは複数回指定できます。
-M
--merge-notes
--no-merge-notes
EL Fファイルでは、重複する注記を削除して SHT_NOT Eタイプのセクションのサイズを小さくします (または小さくしません)。デフォルトでは、デバッグまたは DWO 情報を除去しない限り、この削減が試行されます。
-N symbolname
--strip-symbol=symbolname
ソースファイルから symbolsymbolname を削除します。このオプションは複数回指定することができ、 -K 以外のストリップオプションと組み合わせることもできます。
-o file
既存のファイルを置き換えるのではなく、ストリップされた出力を file に書き込みます。この引数を使用する場合、指定できる objfile 引数は1つだけです。
-p
--preserve-dates
ファイルのアクセス日と変更日を保持します。
-D
--enable-deterministic-archives
deterministic モードで動作します。アーカイブメンバーをコピーしてアーカイブインデックスを書き込む場合は、UID、GID、タイムスタンプにゼロを使用し、すべてのファイルに対して一貫したファイルモードを使用します。

binutils--enable-deterministic-archives と設定されている場合、このモードはデフォルトで有効になります。 以下の -U オプションで無効にできます。

-U
--disable-deterministic-archives
notdeterministic モードで動作させます。これは、上記の -D オプションの逆です。アーカイブメンバーをコピーしてアーカイブインデックスを書き込む場合は、実際の UID、GID、タイムスタンプ、およびファイルモードの値を使用します。

binutils--enable-deterministic-archives で設定されていない限り、これがデフォルトです。

-w
--wildcard
他のコマンドラインオプションで使用される symbolnameで正規表現を許可します。疑問符 (?) 、アスタリスク (*) 、バックスラッシュ (\) 、および角カッコ ([]) の演算子は、シンボル名のどこにでも使用できます。シンボル名の最初の文字が感嘆符 (!) の場合は、そのシンボルの真偽値が逆になります。 たとえば以下のようなものです:

          -w -K !foo -K fo*

これは strip に「fo」という文字で始まるシンボルだけを保持し、「foo」というシンボルを破棄させます。

-x
--discard-all
非グローバルなシンボルを削除します。
-X
--discard-locals
コンパイラが生成したローカルシンボルを削除します。
  (通常 "L" または "." ではじまるシンボルです) 。
--keep-section-symbols
--strip-debug--strip-unneeded などを使用してファイルをストリップする場合、通常はストリップされるセクション名を指定する記号が保持されます。
--keep-file-symbols
--strip-debug--strip-unneeded などを使用してファイルをストリップする場合、ソースファイル名を指定する記号を保持します。これらの記号を使用しない場合はストリップされます。
--only-keep-debug
ファイルをストリップし、--strip-debug ではストリップされないセクションの内容を空にし、デバッグセクションをそのままにします。ELF ファイルでは、すべての注記セクションが出力にも保持されます。

注意:除去されたセクションのセクションヘッダーはサイズも含めて保持されますが、セクションの内容は破棄されます。 実行可能ファイルが別のアドレス空間に再配置された場合でも、他のツールが debuginfo ファイルと実際の実行可能ファイルを照合できるように、セクションヘッダーは保持されます。

このオプションを --add-gnu-debuglink と組み合わせて使用して、 2つの部分からなる実行可能ファイルを作成することを目的としています。1つはストリップされたバイナリで、 RAM やディストリビューションで占有するスペースが少なくなります。もう 1つはデバッグ機能が必要な場合にのみ必要となるデバッグ情報ファイルです。これらのファイルを作成する推奨手順は、次のとおりです:

1.<実行可能ファイルを通常どおりリンクします。"foo" と呼ばれていると仮定すると、 >
1.<"objcopy--only-keep-debug foo foo.dbg" を実行して、デバッグ情報を含むファイルを作成します。>
1.<"objcopy--strip-debug foo" を実行して、ストリップされた実行可能ファイルを作成します。>
1.<"objcopy--add-gnu-debuglink=foo.dbg foo" を実行して、デバッグ情報へのリンクを、ストリップされた実行可能ファイルに追加します。>

注意 --- デバッグ情報ファイルの拡張子としての ".dbg" の選択は任意です。また、 "--only-keep-debug" ステップは任意です。代わりに次のようにすることもできます:

1.<実行可能ファイルを通常どおりリンクします。>
1.<Copy "foo" to "foo.full">
1.<Run "strip --strip-debug foo">
1.<Run "objcopy --add-gnu-debuglink=foo.full foo">

つまり、 --add-gnu-debuglink によってポイントされるファイルが完全な実行形式になります。--only-keep-debug スイッチで作成されたファイルである必要はありません。

注意 --- このスイッチは、完全にリンクされたファイルでの使用のみを目的としています。デバッグ情報が不完全な可能性があるオブジェクトファイルに対してこれを使用しても意味がありません。加えて、gnu_debuglink 機能は現在、デバッグ情報を含む 1つのファイル名の存在のみをサポートしており、オブジェクトファイルごとに複数のファイル名をサポートしていません。

--plugin name
name というプラグインをロードして、追加のターゲット・タイプのサポートを追加します。このオプションは、プラグインサポートを有効にしてツールチェーンを構築した場合にのみ使用できます。

--plugin が指定されていないが、プラグインサポートが有効になっている場合、strip${libdir}/bfd-plugins 内のファイルをアルファベット順に繰り返し、問題のオブジェクトを要求する最初のプラグインが使用されます。

このプラグイン検索ディレクトリは、ld-plugin オプションで使用されるものではないことに注意してください。stripにリンカ・プラグインを使わせるには、 ${libdir}/bfd-plugins のディレクトリにコピーする必要があります。GCC ベースのコンパイルでは、リンカープラグインは liblto_plugin.so.0.0.0 と呼ばれます。Clang ベースのコンパイルでは、LLVMgold.so と呼ばれます。GCC プラグインは常に以前のバージョンと下位互換性があるため、最新のものをコピーするだけで十分です。

-V
--version
strip のバージョン番号を表示します。
-v
--verbose
詳細出力:変更されたすべてのオブジェクトファイルをリストします。アーカイブの場合、 strip -v はアーカイブのすべてのメンバーをリストします。
@file
file からコマンドラインオプションを読み込みます。読み込まれた オプションは、元の @file オプションの代わりに挿入されます。 fileが存在しない場合、または読み込めない場合、オプションは 文字通りに扱われ、削除されません。

file 中のオプションは空白で区切られます。空白文字は、オプション 全体を一重引用符または二重引用符で囲むことによってオプションに含める ことができます。任意の文字 (バックスラッシュを含む) は、含まれる文字の 前にバックスラッシュを付けることによって含めることができます。 file 自体に追加の @file オプションを含めることができます。 このようなオプションは再帰的に処理されます。

 

関連項目

binutils のInfo エントリ。  

著作権

Copyright (c) 1991-2025 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".


 

Index

名前
書式
説明
オプション
関連項目
著作権

This document was created by man2html, using the manual pages.