3.linux对程序的编译方法 下载本文

内容发布更新时间 : 2024/10/22 23:31:50星期一 下面是文章的全部内容请认真阅读。

linux对程序的编译通过命令行进行

gcc 指令的一般格式为:gcc [选项] 要编译的文件 [选项] [目标文件] 其中,目标文件可缺省,gcc 默认生成可执行的文件,名为:编译文件.out [root@localhost gcc]# gcc –E hello.c –o hello.i

意为将hello.c编译成hello.i文件 (2)编译阶段。

要检查代码的规范性、是否有语法错误等

gcc 把代码翻译成汇编语言。用户可以使用“-S”选项来进行查看, 该选项只进行编译而不进行汇编,结果生成汇编代码。

[root@localhost gcc]# gcc –S hello.i –o hello.s

(3)汇编阶段。

汇编阶段是把编译阶段生成的“.s”文件转成目标文件,汇编代码转化为“.o”的二进制目标代码,如下所示:

[root@localhost gcc]# gcc –c hello.s –o hello.o (4)链接阶段。

在成功编译之后,就进入了链接阶段。

gcc 会到系统默认的搜索路径“/usr/lib”下进行查找要用到的函数库,这样就能调 用函数库了。

函数库有静态库和动态库两种。 注意:

静态库是指编译链接时,将库文件的代码全部加入可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了,其后缀名通常为“.a”。

动态库与之相反,在编译链接时并没有将库文件的代码加入可执行文件中,而是在程序执行时加载库,这样可以节省系统的开销,一般动态库的后缀名为.so,gcc 在编译时默认使用动态库。

完成了链接之后,gcc 就可以生成可执行文件,如下所示。

[root@localhost gcc]# gcc hello.o –o hello 程序一步步进行,一共五条指令。

也可以直接使用make指令,它的作用就是对编译程序的打包: 源程序为:led_on.bin:led_on.s

arm-linux-gcc –g –c –o led_on.o led_on.s

arm-linux-ld –Ttext 0x00000000 –g led_on.o –o led_on_elf arm-linux-objcopy –o binary –s led_on_elf led_on.bin clean:

rm –f led_on.bin led_on_elf *.o

第一行:比较两个文件更新时间,如果第二个文件led_on.s时间迟,则执行下面的

语句。

第二行