objcopy Utility
objcopy [ -F bfdname | --target=bfdname ]
[ -I bfdname | --input-target=bfdname ]
[ -O bfdname | --output-target= bfdname ]
[ -S | --strip-all ] [ -g | --strip-debug ]
[ -K symbolname | --keep-symbol= symbolname ]
[ -N symbolname | --strip-symbol= symbolname ]
[ -L symbolname | --localize-symbol= symbolname ]
[ -W symbolname | --weaken-symbol= symbolname ]
[ -x | --discard-all ] [ -X | --discard-locals ]
[ -b byte | --byte= byte ]
[ -i interleave | --interleave= interleave ]
[ -R sectionname | --remove-section= sectionname ]
[ -p | --preserve-dates ] [ --debugging ]
[ --gap-fill= val ] [ --pad-to= address ]
[ --set-start= val ] [ --adjust-start= incr ]
[ --change-address= incr ]
[ --change-section-address= section{=,+,-} val ]
[ --change-warnings ] [ --no-change-warnings ]
[ --set-section-flags= section= flags ]
[ --add-section= sectionname= filename ]
[ --change-leading char ] [--remove-leading-char ]
[ --weaken ]
[ -v | --verbose ] [ -V | --version ] [ --help ]
input-file [ outfile ]
GNU實用工具程序objcopy的作用是拷貝一個目標文件的內容到另一個目標文件中。Objcopy使用GNU BFD庫去讀或寫目標文件。Objcopy可以使用不同於源目標文件的格式來寫目的目標文件(也即是說可以將一種格式的目標文件轉換成另一種格式的目標文件)。通過以上命令行選項可以控制Objcopy的具體操作。
Objcopy在進行目標文件的轉換時,將生成一個臨時文件,轉換完成後就將這個臨時文件刪掉。Objcopy使用BFD做轉換工作。如果沒有明確地格式要求,則Objcopy將訪問所有在BFD庫中已經描述了的並且它可以識別的格式,請參見《GNUpro Decelopment Tools》中“using ld”一章中“BFD庫”部分和“BFD庫中規范的目標文件格式”部分。
通過使用srec作為輸出目標(使用命令行選項-o srec),Objcopy可以產生S記錄格式文件。
通過使用binary作為輸出目標(使用命令行選項-o binary),Objcopy可以產生原始的二進制文件。使用Objcopy產生一個原始的二進制文件,實質上是進行了一回輸入目標文件內容的內存轉儲。所有的符號和重定位信息都將被丟棄。內存轉儲起始於輸入目標文件中那些將要拷貝到輸出目標文件去的部分的最小虛地址處。
使用Objcopy生成S記錄格式文件或者原始的二進制文件的過程中,-S選項和-R選項可能會比較有用。-S選項是用來刪掉包含調試信息的部分,-R選項是用來刪掉包含了二進制文件不需要的內容的那些部分。
input-file
outfile
參數input-file和outfile分別表示輸入目標文件(源目標文件)和輸出目標文件(目的目標文件)。如果在命令行中沒有明確地指定outfile,那麼Objcopy將創建一個臨時文件來存放目標結果,然後使用input-file的名字來重命名這個臨時文件(這時候,原來的input-file將被覆蓋)。
-I bfdname
--input-target=bfdname
明確告訴Objcopy,源文件的格式是什麼,bfdname是BFD庫中描述的標准格式名。這樣做要比“讓Objcopy自己去分析源文件的格式,然後去和BFD中描述的各種格式比較,通過而得知源文件的目標格式名”的方法要高效得多。
-O bfdname
--output-target= bfdname
使用指定的格式來寫輸出文件(即目標文件),bfdname是BFD庫中描述的標准格式名。
-F bfdname
--target= bfdname
明確告訴Objcopy,源文件的格式是什麼,同時也使用這個格式來寫輸出文件(即目標文件),也就是說將源目標文件中的內容拷貝到目的目標文件的過程中,只進行拷貝不做格式轉換,源目標文件是什麼格式,目的目標文件就是什麼格式。
-R sectionname
--remove-section= sectionname
從輸出文件中刪掉所有名為sectionname的段。這個選項可以多次使用。
注意:不恰當地使用這個選項可能會導致輸出文件不可用。
-S
--strip-all (strip 剝去、剝)
不從源文件中拷貝重定位信息和符號信息到輸出文件(目的文件)中去。
-g
--strip-debug
不從源文件中拷貝調試符號到輸出文件(目的文件)中去。
--strip-undeeded
剝去所有在重定位處理時所不需要的符號。
-K symbolname
--keep-symbol= symbolname
僅從源文件中拷貝名為symbolname的符號。這個選項可以多次使用。
-N symbolname
--strip-symbol= symbolname
不從源文件中拷貝名為symbolname的符號。這個選項可以多次使用。它可以和其他的strip選項聯合起來使用(除了-K symbolname | --keep-symbol= symbolname外)。
-L symbolname
--localize-symbol= symbolname
使名為symbolname的符號在文件內局部化,以便該符號在該文件外部是不可見的。這個選項可以多次使用。
-W symbolname
-weaken-symbol= symbolname
弱化名為symbolname的符號。這個選項可以多次使用。
-x
--discard-all (discard 丟棄、拋棄)
不從源文件中拷貝非全局符號。
-X
--discard-locals
不從源文件中拷貝又編譯器生成的局部符號(這些符號通常是L或 . 開頭的)。
-b byte
--byte= byte
Keep only every byte of the input file (header data is not affected). byte can be
in the range from 0 to interleave-1, where interleave is given by the -i or
--interleave option, or the default of 4. This option is useful for creating files to
program ROM . It is typically used with an srec output target.
-i interleave
--interleave= interleave (interleave 隔行、交叉)
Only copy one out of every interleave bytes. Select which byte to copy with the