韦东山嵌入式新一期笔记(gcc-linux-arm和MakeFile) 下载本文

内容发布更新时间 : 2024/5/19 1:36:09星期一 下面是文章的全部内容请认真阅读。

gcc、gcc-linux-arm和MakeFile

1、gcc(编译linux下应用程序)常用选项

1)gcc的常用方法:

gcc [选项] 文件名

注:选项位置可以同时写多个选项,如:gcc -E -v 文件名 2)常用选项(选项中字母区分大小写):

gcc -v:查看gcc编译器版本,显示gcc执行时的详细过程

gcc -o(指定文件名):默认不加-o选项时编译后生成的可执行程序文件

名为a.out,加-o之后可在-o之后指定文件名。

注:

方式1:gcc hello.c 输出一个a.out可执行文件,然后./a.out来执行该应

用程序。

方式2:gcc -o hello hello.c 输出hello.out的可执行程序。(此时重命名

hello不能加后缀.out)

gcc -E:只预处理,不会编译、汇编、链接。

gcc -S:只编译,不会汇编和链接,把.i(预处理后的.c文件)文件翻译

成汇编代码(.s文件)。\\

gcc -c:编译和汇编,不会链接。(机器码,二进制文件) 3)详细编译过程:

预处理-->编译-->汇编-->链接

预处理(hello.i):gcc -E -o hello.i hello.c 编译(hello.s):gcc -S -o hello.s hello.i 汇编(hello.o):gcc -c -o hello.o hello.s

链接(hello.out):gcc -o hello hello.o(最后生成的hello.out可执行文件

的重命名hello不能加后缀.out)

4)特殊情况说明:

gcc -c -o hello.o hello.c gcc -o hello hello.o

说明:第一条指令,gcc会对.c文件默认执行预处理操作,-c再来指明

了编译、汇编,从而得到.o文件。再通过第二条命令将.o文件进行链接,得到可执行程序(.out文件)。

2、链接过程详解

1)链接:

链接就是将汇编生成的OBJ文件(.o文件)、系统库的OBJ文件、文件库链接起来,最终生成可以在特定平台运行的可执行程序。

2)-nostdlib选项:

-nostdlib:不连接系统标准启动文件和标准库文件,只把指定的文件传递给连接器。

gcc -v -nostdlib -o hello hello.o会提示因为没有链接系统标准启动文件和标准库文件,而链接失败。这个-nostdlib选项常用于裸机/bootloader、linux内核等程序,因为他们不需要启动文件和标准库文件。

而对于一般的应用程序才需要系统标准启动文件和标准库文件。 3)动态链接与静态链接:

动态链接使用动态链接库进行链接,生成的程序在执行的时候需要加载所需的动态库才能运行。动态链接生成的程序体积较小,但是必须依赖所需的动态库,否则无法执行。

执行方法:gcc -o hello hello.o(即默认情况下就是执行动态链接)

静态链接使用静态库进行链接,生成的程序包含程序运行所需要的全部库,可直接运行,不过静态链接生成的程序体积较大。

执行方法:gcc -static -o hello hello.o -static:执行静态链接选项。