OBJCOPY

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

名前

objcopy - オブジェクトファイルのコピーや変換を行う  

書式

objcopy [-F bfdname|--target=bfdname]
        [-I bfdname|--input-target=bfdname]
        [-O bfdname|--output-target=bfdname]
        [-B bfdarch|--binary-architecture=bfdarch]
        [-S|--strip-all]
        [-g|--strip-debug]
        [--strip-unneeded]
        [-K symbolname|--keep-symbol=symbolname]
        [--keep-file-symbols]
        [--keep-section-symbols]
        [-N symbolname|--strip-symbol=symbolname]
        [--strip-unneeded-symbol=symbolname]
        [-G symbolname|--keep-global-symbol=symbolname]
        [--localize-hidden]
        [-L symbolname|--localize-symbol=symbolname]
        [--globalize-symbol=symbolname]
        [--globalize-symbols=filename]
        [-W symbolname|--weaken-symbol=symbolname]
        [-w|--wildcard]
        [-x|--discard-all]
        [-X|--discard-locals]
        [-b byte|--byte=byte]
        [-i [breadth]|--interleave[=breadth]]
        [--interleave-width=width]
        [-j sectionpattern|--only-section=sectionpattern]
        [-R sectionpattern|--remove-section=sectionpattern]
        [--keep-section=sectionpattern]
        [--remove-relocations=sectionpattern]
        [--strip-section-headers]
        [-p|--preserve-dates]
        [-D|--enable-deterministic-archives]
        [-U|--disable-deterministic-archives]
        [--debugging]
        [--gap-fill=val]
        [--pad-to=address]
        [--set-start=val]
        [--adjust-start=incr]
        [--change-addresses=incr]
        [--change-section-address sectionpattern{=,+,-}val]
        [--change-section-lma sectionpattern{=,+,-}val]
        [--change-section-vma sectionpattern{=,+,-}val]
        [--change-warnings] [--no-change-warnings]
        [--set-section-flags sectionpattern=flags]
        [--set-section-alignment sectionpattern=align]
        [--add-section sectionname=filename]
        [--dump-section sectionname=filename]
        [--update-section sectionname=filename]
        [--rename-section oldname=newname[,flags]]
        [--long-section-names {enable,disable,keep}]
        [--change-leading-char] [--remove-leading-char]
        [--reverse-bytes=num]
        [--srec-len=ival] [--srec-forceS3]
        [--redefine-sym old=new]
        [--redefine-syms=filename]
        [--weaken]
        [--keep-symbols=filename]
        [--strip-symbols=filename]
        [--strip-unneeded-symbols=filename]
        [--keep-global-symbols=filename]
        [--localize-symbols=filename]
        [--weaken-symbols=filename]
        [--add-symbol name=[section:]value[,flags]]
        [--alt-machine-code=index]
        [--prefix-symbols=string]
        [--prefix-sections=string]
        [--prefix-alloc-sections=string]
        [--add-gnu-debuglink=path-to-file]
        [--only-keep-debug]
        [--strip-dwo]
        [--extract-dwo]
        [--extract-symbol]
        [--writable-text]
        [--readonly-text]
        [--pure]
        [--impure]
        [--file-alignment=num]
        [--heap=reserve[,commit]]
        [--image-base=address]
        [--section-alignment=num]
        [--stack=reserve[,commit]]
        [--subsystem=which:major.minor]
        [--compress-debug-sections]
        [--decompress-debug-sections]
        [--elf-stt-common=val]
        [--merge-notes]
        [--no-merge-notes]
        [--verilog-data-width=val]
        [-v|--verbose]
        [-V|--version]
        [--help] [--info]
        infile [outfile]  

説明

The GNU objcopy ユーティリティはオブジェクトファイルの内容を別ファイルにコピーします。objcopy はオブジェクトファイルの読み書きに GNU BFD ライブラリを使用します。 これによって、書き込み先のオブジェクトファイルの形式を、元のオブジェクトファイルのものから変更できます。objcopy の詳細な動作はコマンドラインオプションによって決定されます。 objcopy は、2つの形式間で完全にリンクされたファイルをコピーできる必要があることに注意してください。ただし、再配置可能オブジェクトファイルを2つの形式間でコピーすると、予想どおりに動作しない場合があります。

objcopy は変換を行う際に一時ファイルを作成し、動作後にこれを消去します。objcopy 変換作業はすべて BFD によって行われます BFDで記述されているすべてのフォーマットにアクセスできるため、明示的に指示されなくてもほとんどのフォーマットを認識できます。

objcopy は、 srec の出力ターゲットを使用してSレコードを生成するために使用できます(例えば、-O srec を使用)。

objcopy は、binary の出力ターゲットを使用して raw バイナリ・ファイルを生成するために使用できます(例: -O binary を使用)。objcopy が生のバイナリー・ファイルを生成する場合、基本的には入力されたオブジェクト・ファイルの内容のメモリー・ダンプを生成します。すべてのシンボルと再配置情報は破棄されます。メモリダンプは、出力ファイルにコピーされた最下位セクションのロードアドレスから開始されます。

Sレコードまたは生のバイナリファイルを生成する場合、-S を使用してデバッグ情報を含むセクションを削除すると便利な場合があります。場合によっては、 -R は、バイナリファイルに必要のない情報を含むセクションを削除するのに便利です。

注意--- objcopy は入力ファイルのエンディアンを変更できません。入力フォーマットにエンディアンが設定されている場合 (一部のフォーマットでは設定されていない) 、objcopy は入力を同じエンディアンのファイルフォーマットまたはエンディアンのないファイルフォーマット (srec など) にコピーすることしかできません。 (ただし、--reverse-bytes オプションを参照してください) 。  

オプション

infile
outfile
は、それぞれ入力ファイルと出力ファイルです。 outfile を指定しない場合、objcopy はテンポラリ・ファイルを作成し、その結果を infile という名前にリネームします。
-I bfdname
--input-target=bfdname
入力ファイルのオブジェクト形式を bfdname として取り扱います。通常は自動的に推測します。Xrefなので削る

出力ファイルのオブジェクト形式をbfdname とします。 Xrefなので削る

-F bfdname
--target=bfdname
入出力ファイルのオブジェクト形式に bfdname を使用します。すなわち、入力ファイルを変換せずに単に出力ファイルにコピーします。Xrefなので削る
-B bfdarch
--binary-architecture=bfdarch
アーキテクチャのない入力ファイルをオブジェクトファイルに変換する場合に便利です。 この場合、出力のアーキテクチャはbfdarchに設定できます。入力されるファイルに既知の bfdarch が含まれている場合、このオプションは無視されます。プログラム内でこのバイナリデータにアクセスするには、変換処理で作成された特殊記号を参照します。これらのシンボルは、 _binary_objfile _start 、binary_objfile_end 、_binary_objfile_size と呼ばれています。たとえば、画像ファイルをオブジェクトファイルに変換し、これらのシンボルを使用してコード内でアクセスできます。
-j sectionpattern
--only-section=sectionpattern
指定されたセクションのみを入力ファイルから出力ファイルにコピーします。 このオプションは複数回指定できます。このオプションを不適切に使用すると、出力ファイルが使用できなくなる可能性があることに注意してください。sectionpattern では、ワイルドカード文字を使用できます。

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

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

上記は '.text.*' に一致するすべてのセクションがコピーされますが、'.text.foo' セクションはコピーされません。

-R sectionpattern
--remove-section=sectionpattern
sectionpattern に一致するセクションを出力から削除します。 このオプションは複数回指定できます。このオプションを不適切に使用すると、出力ファイルが使用できなくなる可能性があることに注意してください。sectionpattern では、ワイルドカード文字を使用できます。-j-R の両方のオプションを一緒に使用すると、動作が不定になります。

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

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

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

--keep-section=sectionpattern
出力ファイルからセクションを削除する場合は、sectionpattern と一致するセクションを保持します。
--remove-relocations=sectionpattern
sectionpattern に一致するセクションの非動的再配置を出力から削除します。このオプションは、複数回指定できます。このオプションを不適切に使用すると、出力されたファイルが使用できなくなる可能性があることに注意してください。また、 .rela.plt を使用して実行可能ファイルまたは共有ライブラリから --remove-relocations=.plt などの動的再配置セクションを削除しようとしても機能しません。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を仮定します。

再配置およびシンボル情報をソースファイルからコピーしません。 また、デバッグセクションも削除します。

-g
--strip-debug
デバッグシンボルを入力ファイルからコピーしません。
--strip-unneeded
--strip-debug によって除去されたセクションとデバッグシンボルに加えて、再配置処理に不要なすべてのシンボルを削除します。
-K symbolname
--keep-symbol=symbolname
シンボルを除去するときは、通常除去される場合でも、シンボル symbolname をそのままにします。このオプションは複数回指定できます。
-N symbolname
--strip-symbol=symbolname
ソースファイルからシンボルsymbolname をコピーしません。このオプションは、複数回指定できます
--strip-unneeded-symbol=symbolname
再配置で必要になる場合を除き、ソースファイルからシンボル symbolname をコピーしません。このオプションは複数回指定できます。
-G symbolname
--keep-global-symbol=symbolname
シンボル symbolname のみをグローバルに保持します。他のすべてのシンボルをファイルに対してローカルにし、外部から見えないようにします。このオプションは、複数回指定できます。注意: このオプションは、 --globalize-symbol または --globalize-symbols オプションと一緒に使用することはできません。
--localize-hidden
ELF オブジェクトで、非表示または内部可視性を持つすべてのシンボルをローカルとしてマークします。このオプションは、最上位のシンボル固有のローカライズオプション( -Lなど)に適用されます。
-L symbolname
--localize-symbol=symbolname
symbolname というグローバルシンボルまたはウィークシンボルをローカルシンボルに変換して、外部から見えないようにします。このオプションは、複数回指定できます。注意 - 一意のシンボルは変換されません。
-W symbolname
--weaken-symbol=symbolname
シンボル symbolname を weakにします。このオプションは複数回指定できます。
--globalize-symbol=symbolname
シンボル symbolname にグローバルスコープを指定して、シンボルを定義したファイルの外から見えるようにします。<このオプションは、複数回指定できます注記:このオプションは、 -G または --keep-global-symbol のオプションと組み合わせて使用することはできません。
-w
--wildcard
他のコマンドラインオプションで使用される symbolnameで正規表現を許可します。疑問符 (?) 、アスタリスク (*) 、バックスラッシュ (\) 、および角カッコ ([]) の演算子は、シンボル名のどこにでも使用できます。シンボル名の最初の文字が感嘆符 (!) の場合は、そのシンボルの真偽値が逆になります。 たとえば以下のようなものです:

          -w -W !foo -W fo*

これは objcopy が「foo」以外の「fo」で始まるすべてのシンボルを弱くする原因となります。

-x
--discard-all
入力ファイルのグローバルでないシンボルはコピーしません。
-X
--discard-locals
コンパイラが生成したローカルなシンボルはコピーしません。
  (通常 "L" または "." ではじまるシンボルです) 。
-b byte
--byte=byte
--interleave オプションでインタリーブが有効になっている場合は、byte 番目のバイトから保持するバイト範囲を開始します。 byte は 0 から breadth -1 の範囲で、breadth--interleave オプションで指定された値です。
-i [breadth]
--interleave[=breadth]
すべての breadth バイトからのみ範囲をコピーします。(ヘッダーデータは影響を受けません)。--byte オプションを使用して、コピーを開始する範囲内のバイトを選択します。--interleave-width オプションを使用して、範囲の幅を選択します。

このオプションは、 ROM プログラムへのファイルを作成する場合に便利です。通常は "srec" 出力ターゲットとともに使用されます。--byte オプションも指定しないと、 objcopy はエラーになることに注意してください。

デフォルトのインタリーブ幅は 4 であるため、 --byte が 0 に設定されている場合、 objcopy は 4 バイトごとに最初のバイトを入力から出力にコピーします。

--interleave-width=width
--interleave オプションとともに使用する場合は、width バイトを一度にコピーします。コピーするバイト範囲の開始位置は --byte オプションで設定し、範囲の大きさは --interleave オプションで設定します。

このオプションのデフォルト値は 1 です。width オプションで設定された byte 値に --byte を加えた値は、--interleave オプションで設定されたインタリーブ幅を超えてはなりません。

このオプションは、-b 0 -i 4 --interleave-width=2-b 2 -i 4 --interleave-width=2 を 2 つのobjcopy コマンドに渡すことで、32ビットバスにインターリーブされた 2 つ の 16ビットフラッシュのイメージを作成するために使用できます。入力が「12345678」の場合、出力はそれぞれ「1256」と「3478」になります。

-p
--preserve-dates
出力ファイルのアクセス日付と修正日付を、入力ファイルと同じ日付に設定します。

このオプションは、 SOURCE_DATE_EPOCH 環境変数が定義されていない限り、PE フォーマット・ファイルのヘッダーに格納されているデータもコピーします。これが定義されている場合、この変数はヘッダーに保存されている日付として使用され、Unix エポックからの秒数として解釈されます。

-D
--enable-deterministic-archives
deterministic モードで動作します。アーカイブメンバーをコピーしてアーカイブインデックスを書き込む場合は、UID、GID、タイムスタンプにゼロを使用し、すべてのファイルに対して一貫したファイルモードを使用します。

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

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

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

--debugging
可能ならばデバッグ情報を変換します。特定のデバッグ形式のみがサポートされており、変換プロセスには時間がかかる可能性があるため、これはデフォルトではありません。
--gap-fill val
val でセクション間のギャップを埋めます。この操作は、セクションの load address (LMA) に適用されます。これは、下位アドレスのセクションサイズを拡大することにより行われ、作成された余分なスペースを val で埋めます。
--pad-to address
ロード・アドレス addressまで出力ファイルを埋めます。これは、最後のセクションのサイズを大きくすることによって行われます。余分なスペースは、 --gap-fill で指定された値で埋められます(既定はゼロ)。
--set-start val
新しいファイルの開始アドレス (エントリアドレスとも呼びます) を val に設定します。すべてのオブジェクトファイルフォーマットが開始アドレスの設定をサポートしているわけではありません。
--change-start incr
--adjust-start incr
incr を追加して、開始アドレス (エントリアドレスとも呼びます) を変更します。すべてのオブジェクトファイルフォーマットがエントリアドレスの設定をサポートしているわけではありません。
--change-addresses incr
--adjust-vma incr
incr を追加して、すべてのセクションの VMA と LMA アドレス、およびエントリアドレスを変更します。オブジェクトファイルのフォーマットによっては、セクションアドレスを任意に変更できない場合があります。これはセクションを再配置しないことに注意してください。プログラムがセクションを特定のアドレスにロードすることを想定している場合、このオプションを使用してセクションを別のアドレスにロードするように変更すると、プログラムが失敗する可能性があります。
--change-section-address sectionpattern{=,+,-}val
--adjust-section-vma sectionpattern{=,+,-}val
sectionpattern に一致するセクションの VMA アドレスと LMA アドレスの両方を設定または変更します。= を使用する場合、セクション・アドレスは val に設定されます。それ以外の場合は、セクションアドレスにval が加算または減算されます。上記の--change-addresses にあるコメントを参照してください。sectionpattern が入力ファイルのどのセクションとも一致しない場合は、--no-change-warnings を使用しない限り、警告が発行されます。
--change-section-lma sectionpattern{=,+,-}val
sectionpattern に一致するセクションの LMA アドレスを設定または変更します。LMA アドレスは、プログラムのロード時にセクションがメモリにロードされるアドレスです。通常、これはプログラム実行時のセクションのアドレスである VMA アドレスと同じですが、一部のシステム、特にプログラムが ROM に保持されているシステムでは、この 2 つが異なる場合があります。= を使用する場合、セクション・アドレスは val に設定されます。それ以外の場合は、セクションアドレスにval が加算または減算されます。上記の --change-addresses にあるコメントを参照してください。sectionpattern が入力ファイルのどのセクションとも一致しない場合は、--no-change-warnings を使用しない限り、警告が発行されます。
--change-section-vma sectionpattern{=,+,-}val
sectionpattern に一致するセクションの VMA アドレスを設定または変更します。VMA アドレスは、プログラムが実行を開始した後にセクションが配置されるアドレスです。 通常、これはセクションがメモリにロードされるアドレスである LMA アドレスと同じですが、一部のシステム、特にプログラムが ROM に保持されているシステムでは、この 2 つが異なる場合があります。= を使用する場合、セクション・アドレスは val に設定されます。それ以外の場合は、セクションアドレスに val が加算または減算されます。上記の--change-addresses にあるコメントを参照してください。sectionpattern が入力ファイルのどのセクションとも一致しない場合は、--no-change-warnings を使用しない限り、警告が発行されます。

注:完全にリンクされたバイナリ内のセクションの VMA を変更すると、そのセクションが古いアドレスにあることを期待するコードが存在する可能性があるため、危険な場合があります。

--change-warnings
--adjust-warnings
--change-section-address--change-section-lma 、または --change-section-vma を使用していて、セクションパターンがどのセクションとも一致しない場合は、警告が表示されます。これがデフォルトです。
--no-change-warnings
--no-adjust-warnings
--change-section-address--adjust-section-lma 、または --adjust-section-vma を使用している場合は、セクションパターンがどのセクションとも一致しない場合でも、警告は表示されません。
--set-section-flags sectionpattern=flags
sectionpattern に一致するセクションのフラグを設定します。flags 引数は、フラグ名をコンマで区切った文字列です。認識される名前は、 alloccontentsloadnoloadreadonlycodedataromexcludesharedebug、と large です。 内容を持たないセクションに対して contents フラグを設定することはできますが、内容を持つセクションの contents フラグをクリアしても意味がありません。代わりにセクションを削除してください。すべてのフラグがすべてのオブジェクトファイルフォーマットで意味を持つわけではありません。特に share フラグは COFF 形式ファイルでのみ意味があり、ELF 形式ファイルでは意味がありません。ELF X86-64 固有のフラグ large は、SHF_X86_64_LARGE に対応します。
--set-section-alignment sectionpattern=align
sectionpattern に一致するセクションのアラインメントを設定します。 align はアラインメントをバイト単位で指定し、2のべき乗、つまり1、2、4、8... でなければなりません。

注意:セクションの位置合わせを設定しても、その LMA または VMA アドレスは自動的には位置合わせされません。これらも変更する必要がある場合は、--change-section-lma および/または --change-section-vma オプションを使用する必要があります。また、VMA を変更すると、完全にリンクされたバイナリで問題が発生する可能性があることにも注意してください。この場合、セクションの内容が古いアドレスにあることを期待するコードが存在する可能性があります。

--add-section sectionname=filename
ファイルのコピー中に sectionname という名前の新しいセクションを追加します。新しいセクションの内容は、ファイル filename から取得されます。セクションのサイズはファイルのサイズになります。このオプションは、任意の名前のセクションをサポートできるファイル形式でのみ機能します。 注意-新しく作成されたセクションの属性を設定するには、--set-section-flags オプションを使用する必要がある場合があります。
--dump-section sectionname=filename
sectionnameという名前のセクションの内容をファイルを filename に配置し、以前にそこにあった可能性のある内容を上書きします。このオプションは --add-section の逆です。 このオプションは --only-section オプションと似ていますが、フォーマットされたファイルを作成せず、再配置を適用せずに内容を生のバイナリデータとしてダンプするだけである点が異なります。このオプションは、複数回指定できます。
--update-section sectionname=filename
sectionname という名前のセクションの既存の内容を filename ファイルの内容に置き換えます。セクションのサイズは、ファイルのサイズに合わせて調整されます。sectionname のセクションフラグは変更されません。ELF 形式のファイルでは、セクションからセグメントへのマッピングも変更されません。--remove-section の後に --add-section を使用することはできません。このオプションは、複数回指定できます。

注意- --rename-section--update-section を使用して、 1つのコマンドラインからセクションの更新と名前変更の両方を行うことができます。この場合、元のセクション名を --update-section に渡し、元のセクション名と新しいセクション名を --rename-section に渡します。

--add-symbol name=[section:]value[,flags]
ファイルのコピー中に name という名前の新しいシンボルを追加します。このオプションは、複数回指定できます。section が指定されている場合、シンボルはそのセクションに関連付けられます。指定されていない場合は、 ABS シンボルになります。未定義のセクションを指定すると、致命的なエラーが発生します。値のチェックは行われず、指定したとおりに扱われます。シンボルフラグを指定できますが、すべてのフラグがすべてのオブジェクトファイルフォーマットで意味を持つわけではありません。デフォルトでは、シンボルはグローバルになります。特殊なフラグ 'before=othersym' は、指定された othersym の前に新しいシンボルを挿入します。それ以外の場合、シンボルはシンボルテーブルの最後に出現順に追加されます。
--rename-section oldname=newname[,flags]
セクション名を oldname から newname に変更します。オプションで、その過程でセクションのフラグを flags に変更できます。これは、出力がオブジェクトファイルのままであり、リンクされた実行可能ファイルにならないという点で、名前変更を実行するためにリンカースクリプトを使用するよりも有利です。このオプションは--set-section-flagsオプションと同じフラグを受け付けます。

このオプションは、入力形式がバイナリの場合に特に役立ちます。これにより、常に .data というセクションが作成されるためです。たとえば、バイナリデータを含む .rodata というセクションを作成する場合は、次のコマンドラインを使用して実行できます:

          objcopy -I binary -O <output_format> -B <architecture> \
           --rename-section .data=.rodata,alloc,load,readonly,data,contents \
           <input_binary_file> <output_object_file>

--long-section-names {enable,disable,keep}
"COFF" および "PE-COFF" オブジェクト形式を処理する際の長いセクション名の処理を制御します。デフォルトの動作は keep で、入力ファイルに長いセクション名がある場合は、それを保持します。 enable および disable オプションは、出力オブジェクトでの長いセクション名の使用を強制的に有効または無効にします。 disable が有効な場合、入力オブジェクトの長いセクション名は切り捨てられます。 enable オプションは、入力に長いセクション名がある場合にのみ出力します。これはほとんど keep と同じですが、 enable オプションが出力ファイルに空の文字列テーブルを強制的に作成するかどうかは定義されていません。
--change-leading-char
一部のオブジェクトファイル形式では、シンボルの先頭に特殊文字が使用されます。最も一般的なこのような文字はアンダースコアで、コンパイラがすべてのシンボルの前に追加することがよくあります。このオプションは、objcopy に対して、オブジェクト・ファイル・フォーマット間の変換時に各シンボルの先頭文字を変更するように指示します。オブジェクトファイル形式で同じ先頭文字が使用されている場合、このオプションは無効です。それ以外の場合は、必要に応じて文字を追加、削除、または変更します。
--remove-leading-char
大域シンボルの最初の文字がオブジェクトファイルフォーマットで使用される特殊なシンボル先頭文字である場合は、その文字を削除します。最も一般的な記号の先頭文字はアンダースコアです。このオプションは、すべての大域シンボルから先頭のアンダースコアを削除します。これは、シンボル名の規則が異なるさまざまなファイル形式のオブジェクトをリンクする場合に便利です。これは、出力されるファイルのフォーマットに関係なく、必要に応じて常にシンボル名を変更するという点で、--change-leading-char とは異なります。
--reverse-bytes=num
出力内容を含むセクション内のバイトを反転します。スワップを実行するには、セクションの長さが指定された値で均等に割り切れる必要があります。インターリーブが実行される前に、リバースが行われます。

このオプションは、通常、問題のあるターゲットシステムの ROM イメージを生成するときに使用されます。例えば、一部のターゲットボードでは、 8ビット ROM からフェッチされ た 32ビットワードは、CPU のバイト順序に関係なく、リトルエンディアンのバイト順序で再構成されます。プログラミングモデルによっては、ROM のエンディアンを変更する必要があります。

12345678 という 8バイトを含むセクションを持つ単純なファイルを考えてみましょう。

上記の例で--reverse-bytes=2 を使用すると、出力ファイルのバイトは 21436587 の順になります。

上記の例で --reverse-bytes=4 を使用すると、出力ファイルのバイトは 43218765 の順になります。

上記の例で--reverse-bytes=2 を使用し、その後に出力ファイルで --reverse-bytes=4 を使用すると、 2番目の出力ファイルのバイトは 34127856 の順序になります。

--srec-len=ival
srec 出力に対してのみ有効。生成される Srecord の最大長を ival に設定します。この長さは、アドレス、データおよび CRC フィールドの両方をカバーします。
--srec-forceS3
srec 出力に対してのみ有効です。S1/S2 レコードの生成を避け、S3 のみのレコード形式を作成します。
--redefine-sym old=new
シンボル名 oldnew に変更します。これは、ソースがなく、名前の競合がある 2つのものをリンクしようとする場合に便利です。
--redefine-syms=filename
ファイル filename にリストされている各シンボルペア「old new」に --redefine-sym を適用します。filename は、1行に 1つのシンボルペアを持つ単純な平文ファイルです。行コメントはハッシュ文字(井桁文字)で始めることができます。このオプションは複数回指定できます。
--weaken
ファイル内のすべてのグローバルシンボルをウィークシンボルに変更します。これは、リンカに対して -R オプションを使用し、他のオブジェクトに対してリンクされるオブジェクトを構築する場合に便利です。このオプションは、ウィークシンボルをサポートするオブジェクトファイルフォーマットを使用する場合にのみ有効です。
--keep-symbols=filename
filename ファイルにリストされている各シンボルに --keep-symbol オプションを適用します。filenameは単なる平文ファイルで、1行に 1つのシンボル名が含まれています。行コメントはハッシュ文字(井桁文字)で始めることができます。 このオプションは複数回指定できます。
--strip-symbols=filename
ファイルfilename にリストされている各シンボルに --strip-symbol オプションを適用します。filenameは単なる平文ファイルで、1行に 1つのシンボル名が含まれています。行コメントはハッシュ文字(井桁文字)で始めることができます。 このオプションは複数回指定できます。
--strip-unneeded-symbols=filename
filename ファイルにリストされている各シンボルに --strip-unneeded-symbol オプションを適用します。filename は単なる平文ファイルで、 1行に 1つのシンボル名が含まれています。行コメントはハッシュ文字(井桁文字)で始めることができます。このオプションは複数回指定できます。
--keep-global-symbols=filename
filenameファイルにリストされている各シンボルに --keep-global-symbol オプションを適用します。filename は単なる平文ファイルで、 1行に 1つのシンボル名が含まれています。行コメントはハッシュ文字(井桁文字)で始めることができます。このオプションは複数回指定できます。
--localize-symbols=filename
filename ファイルにリストされている各シンボルに --localize-symbol オプションを適用します。filenameは単なる平文ファイルで、1行に 1つのシンボル名が含まれています。行コメントはハッシュ文字(井桁文字)で始めることができます。 このオプションは複数回指定できます。
--globalize-symbols=filename
filename ファイルにリストされている各シンボルに --globalize-symbol オプションを適用します。filenameは単なる平文ファイルで、1行に 1つのシンボル名が含まれています。行コメントはハッシュ文字(井桁文字)で始めることができます。 このオプションは複数回指定できます。注意:このオプションは、-G または --keep-global-symbol オプションと一緒に使用することはできません。
--weaken-symbols=filename
filename ファイルにリストされている各シンボルに --weaken-symbol オプションを適用します。filenameは単なる平文ファイルで、1行に 1つのシンボル名が含まれています。行コメントはハッシュ文字(井桁文字)で始めることができます。 このオプションは複数回指定できます。
--alt-machine-code=index
出力のアーキテクチャに代替マシンコードがある場合は、デフォルトのコードの代わりに index のコードを使用します。これは、マシンに正式なコードが割り当てられ、ツールチェーンが新しいコードを採用しているが、他のアプリケーションが使用されている元のコードに依存している場合に便利です。ELF ベースのアーキテクチャでは、 index の選択肢が存在しない場合、値は絶対数として扱われ、ELF ヘッダの e_machine フィールドに格納されます。
--writable-text
出力テキストを書き込み可能にします。このオプションは、すべてのオブジェクトファイル形式に対して有効なわけではありません。
--readonly-text
出力テキストを書き込み禁止にします。このオプションは、すべてのオブジェクトファイル形式に対して有効なわけではありません。
--pure
出力ファイルをデマンドページとしてマークします。このオプションは、すべてのオブジェクトファイル形式に対して有効なわけではありません。
--impure
出力ファイルを impure とマークします。このオプションは、すべてのオブジェクトファイル形式に対して有効なわけではありません。
--prefix-symbols=string
出力ファイルのすべてのシンボルの前に string を付けます。
--prefix-sections=string
出力ファイルのすべてのセクション名の前に string を付けます。
--prefix-alloc-sections=string
出力ファイル内のすべての割り当てられたセクションの名前の前に string を付けます。
--add-gnu-debuglink=path-to-file
path-to-file への参照を含む .gnu_debuglink セクションを作成し、出力ファイルに追加します。注意:path-to-file にファイルが存在する必要があります。.gnu_debuglink セクションを追加するプロセスには、デバッグ情報ファイルの内容のチェックサムをセクションに埋め込むことが含まれます。

デバッグ情報ファイルがある場所で構築され、後で別の場所にインストールされる場合は、インストールされた場所へのパスを使用しないでください。インストールされたファイルがまだ存在しないため、--add-gnu-debuglink オプションは失敗します。 代わりに、デバッグ情報ファイルを現在のディレクトリに置き、次のようにディレクトリコンポーネントなしで --add-gnu-debuglink オプションを使用します:

         objcopy --add-gnu-debuglink=foo.debug

デバッグ時に、デバッガは一連の既知の場所で個別のデバッグ情報ファイルを検索しようとします。これらの場所の正確なセットは、使用されているディストリビューションによって異なりますが、通常は次の場所が含まれます:

"* 実行可能ファイルと同じディレクトリ。"
"* 実行可能ファイル .debug を含むディレクトリのサブディレクトリ"
"* グローバルデバッグディレクトリ(/usr/lib/debugなど)。"

デバッガが実行される前に、デバッグ情報ファイルがこれらの場所のいずれかにインストールされていれば、すべてが正しく動作するはずです。

--keep-section-symbols
--strip-debug--strip-unneeded などを使用してファイルをストリップする場合、通常はストリップされるセクション名を指定する記号が保持されます。
--keep-file-symbols
--strip-debug--strip-unneeded などを使用してファイルをストリップする場合、ソースファイル名を指定する記号を保持します。これらの記号を使用しない場合はストリップされます。
--only-keep-debug
ファイルをストリップし、--strip-debugでストリップされないセクションの内容を削除し、デバッグセクションをそのままにします。ELF ファイルでは、すべての note セクションが出力に保持されます。

注意:除去されたセクションのセクションヘッダーはサイズも含めて保持されますが、セクションの内容は破棄されます。 実行可能ファイルが別のアドレス空間に再配置された場合でも、他のツールが 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 "objcopy --strip-debug foo">
1.<Run "objcopy --add-gnu-debuglink=foo.full foo">

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

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

--strip-dwo
すべてのDWARF.dwo セクションの内容を削除し、残りのデバッグセクションとすべてのシンボルはそのままにします。 このオプションは、コンパイラがデバッグ情報を .o ファイルと別の .dwo ファイルに分割する -gsplit-dwarf オプションの一部として使用することを意図しています。コンパイラはすべてのデバッグ情報を同じファイルに生成し、次に --extract-dwo オプションを使用して .dwo セクションを .dwo ファイルにコピーし、次に --strip-dwo オプションを使用して元の .o ファイルからこれらのセクションを削除します。
--extract-dwo
すべての DWARF.dwo セクションの内容を抽出します。詳細については、--strip-dwo オプションを参照してください。
--file-alignment num
ファイルのアラインメントを指定します。ファイル内のセクションは、常にこの番号の倍数であるファイルオフセットから始まります。デフォルト値は 512 です。 [このオプションは PE ターゲットに固有です。]
--heap reserve
--heap reserve,commit
このプログラムのヒープとして使用するために予約 (およびオプションでコミット) するメモリーのバイト数を指定します。 [このオプションは PE ターゲットに固有です。]
--image-base value
プログラムまたは DLL のベースアドレスとして value を使用します。これは、プログラムまたは dll が読み込まれるときに使用される最小のメモリ位置です。再配置の必要性を減らし、dll のパフォーマンスを向上させるには、各 dll に一意のベースアドレスを指定し、他の dll と重複しないようにする必要があります。デフォルトは、実行可能ファイルの場合は 0x400000、 dll の場合は 0x10000000 です。 [このオプションは PE ターゲットに固有です。]
--section-alignment num
[このオプションは PE ターゲットに固有です。]

PE ヘッダーのセクションアラインメントフィールドを設定します (バイナリに存在する場合)。メモリ内のセクションは、常にこの数の倍数であるアドレスから始まります。デフォルト値は 0x1000 です。

注意:セクションの LMA または VMA アドレスが調整されなくなり、それらのアドレスが --set-section-lma または --set-section-vma オプションを使用して設定されておらず、ファイルが完全に再配置された場合は、警告メッセージが発行されます。その後、LMA と VMA を更新する必要があるかどうかはユーザーの判断に委ねられます。

--stack reserve
--stack reserve,commit
このプログラムのスタックとして使用するために予約(およびオプションでコミット)するメモリのバイト数を指定します。 [このオプションは PE ターゲットに固有です。]
--subsystem which
--subsystem which:major
--subsystem which:major.minor
プログラムが実行されるサブシステムを指定します。which の有効な値は "native""windows""console""posix""efi-app""efi-bsd""efi-rtd""sal-rtd""xbox" です。オプションで、サブシステムのバージョンも設定できます。which には数値も使用できます。 [このオプションは PE ターゲットに固有です。]
--extract-symbol
ファイルのセクションフラグとシンボルを保持し、セクションデータをすべて削除します。 具体的なオプションは以下のとおりです:
*<すべてのセクションの内容を削除します。>
*<各セクションのサイズをゼロに設定し>
*<ファイルの先頭アドレスを0に設定します。>

このオプションは、VxWorks カーネルの .sym ファイルを構築するために使用されます。 また、 --just-symbols リンカーの入力ファイルのサイズを削減するのにも役立ちます。

--compress-debug-sections
ELF ABI の zlib with SHF_COMPRESSED を使用して、DWARF デバッグセクションを圧縮します。注意:圧縮によって実際にセクションが より大きくなる場合、そのセクションは圧縮されません。
--compress-debug-sections=none
--compress-debug-sections=zlib
--compress-debug-sections=zlib-gnu
--compress-debug-sections=zlib-gabi
--compress-debug-sections=zstd
ELF ファイルの場合、これらのオプションは DWARF デバッグセクションの圧縮方法を制御します。--compress-debug-sections=none--decompress-debug-sectionsと同じです。 --compress-debug-sections=zlib--compress-debug-sections=zlib-gabi--compress-debug-sections と同じです。 --compress-debug-sections=zlib-gnu は、廃止された zlib-gnu 形式を使用してDWARF デバッグセクションを圧縮します。デバッグセクションは .zdebug で始まるように名前が変更されます。 --compress-debug-sections=zstd は、zstd を使用して DWARF デバッグセクションを圧縮します。注意:圧縮によって実際にセクションがより大きくなった場合、そのセクションは圧縮も名前変更もされません。
--decompress-debug-sections
DWARF デバッグセクションを解凍します。.zdebug セクションの場合、元の名前がリストアされます。
--elf-stt-common=yes
--elf-stt-common=no
ELF ファイルの場合、共通シンボルを "STT_COMMON" 型と "STT_OBJECT" 型のどちらに変換するかを制御します。 --elf-stt-common=yes は、共通のシンボルタイプを "STT_COMMON" に変換します。--elf-stt-common=no は、共通のシンボルタイプを "STT_OBJECT" に変換します。
--merge-notes
--no-merge-notes
ELF ファイルでは、重複する注記を削除して SHT_NOTE タイプのセクションのサイズを小さくします(または小さくしません)。
-V
--version
objcopy のバージョン番号を表示します。
--verilog-data-width=bytes
Verilog 出力の場合、このオプションは各出力データ要素に変換されるバイト数を制御します。入力ターゲットは、変換のエンディアンを制御します。
-v
--verbose
詳細出力:変更されたすべてのオブジェクトファイルをリストします。アーカイブの場合、 objcopy -V はアーカイブのすべてのメンバーをリストします。
--help
objcopy のオプションの要約を表示します。
--info
使用可能なすべてのアーキテクチャとオブジェクトフォーマットを示すリストを表示します。
@file
file からコマンドラインオプションを読み込みます。読み込まれた オプションは、元の @file オプションの代わりに挿入されます。 fileが存在しない場合、または読み込めない場合、オプションは 文字通りに扱われ、削除されません。

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

 

関連項目

ld(1) 、objdump(1) 、と 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.