一、C源码到可执行文件的过程:
分为四个阶段,分别是:
1.预编译
2.编译(源代码-->汇编代码)
3.汇编(汇编代码-->目标代码)
4.链接(目标代码、库-->可执行文件)
二、链接程序是 ld, 依据链接脚本进行链接操作。默认的链接脚本可以使用 ld --verbose 查看。
链接脚本文件中包含有一些配置信息,指示链接器 ld 怎样进行可执行文件的装配。
.global _start
.text
message:
.ascii "Hello, World!\n"
_start:
# print the message
mov $1, %rax # syscall 1 is write
mov $1, %rdi # file descriptor 1 is stdout
mov $message, %rsi # pass address of messsage
mov $13, %rdx # pass length of message
syscall # perform write system call
# exit
mov $60, %rax # syscall 60 is exit
mov $0, %rdi # pass exit status of 0
syscall # perform exit system call
$ gcc -c hello.s # 编译生成目标文件 hello.o
$ ld hello.o # 链接目标文件 hello.o 生成可执行文件 a.out
$ ./a.out
Hello, World!
三、定制的链接脚本
在嵌入式环境开发进行交叉编译代码时,默认的链接脚本不能满足目标系统的需要,此时需要自己定制链接脚本。