我们再linux 编译中 经常会用到这几个 编译指令: objcopy 和 ld 那么这两个命令 那么这两个命令有什么区别呢.
首先我们我们gcc 编译完成后的 .O 文件 是包含有elf 头的 这个头部没有任何实质的指令语句 只有一些编译器的系统信息。
首先对于多文件的复杂工程, 工程文件有很多 每个文件都拥有独立的 .bss .text .data 区域 所以ld 的一个作用就是把不同的.o 文件的 各个区域重新 连接起来。 组成一个 可执行的文件。
而objcopy 的作用就比较 单一了, 就是再没有操作系统的单板上运行 的程序 必须要去掉 elf 头,不然他没办法运行。 单板机器只会一条条指令 运行。 这个命令再bootloader 的编写中比较常见。