- 论坛徽章:
- 0
|
回复 #10 sherf 的帖子
ld 的功能為object files 鏈結成可執行檔或是relocateable object code, 若object files有使用到其他的library,如runtime.c 裡頭使用到standard I/O library(stdio.h)或是其他的library,那便需要告知 ld 將這些library也 link 進來,並根據腳本檔案(script file)將程式碼分配在適當的區塊。
所以不能僅提供runtime.o 尚須提供相關的library。
另外,一個程式要能執行,需要準備執行環境,所以除了使用到的library之外,尚須提供 ld 一些程式執行環境初始化與程式結束執行時的 house keeping functions. 以GCC for ARM ELF 為例,crtbegin.o crti.o crt0.o crtend.o crtn.o 便是便演了這些角色的 object files,請記住,不同的toolchain所提供的執行環境設定檔案是不同的。
以下是一個類似的例子,collect2 雖然不是ld不過他會呼叫ld來完成link的動作,所以他的參數設定是很有參考性的。
/home/nore/bin/libexec/gcc/arm-elf/4.1.2/collect2 -X -o dhry /home/nore/bin/lib/gcc/arm-elf/4.1.2/crti.o /home/nore/bin/lib/gcc/arm-elf/4.1.2/crtbegin.o /home/nore/bin/lib/gcc/arm-elf/4.1.2/../../../../arm-elf/lib/crt0.o -L/home/nore/bin/lib/gcc/arm-elf/4.1.2 -L/home/nore/bin/lib/gcc/arm-elf/4.1.2/../../../../arm-elf/lib /home/nore/tmp/ccGxlMIF.o --start-group -lgcc -lc --end-group /home/nore/bin/lib/gcc/arm-elf/4.1.2/crtend.o /home/nore/bin/lib/gcc/arm-elf/4.1.2/crtn.o |
|