内容发布更新时间 : 2025/2/24 0:59:17星期一 下面是文章的全部内容请认真阅读。
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:执行静态链接选项。