
ARM之编译与交叉编译
发布日期:2021-05-06 06:47:34
浏览次数:31
分类:精选文章
本文共 1336 字,大约阅读时间需要 4 分钟。
gcc和arm-linux-gcc的常用选项
gcc的使用方法: gcc [选项] 文件名gcc常用选项:
-
-v:查看gcc编译器的版本,显示gcc执行时的详细过程
-
-o
:将输出文件命名为 ,文件名不能与源文件名相同 -
-E:只进行预处理,不会编译、汇编或链接
-
-S:只编译,不会汇编或链接
-
-c:编译和汇编,但不会链接
gcc会对.c文件默认进行预处理操作,-c选项再次指明了编译和汇编的步骤,生成.o文件
- gcc -o hello hello.o:通过链接.o文件生成可执行程序
.obj文件是gcc编译过程中生成的中间文件
方式1:
gcc hello.c 输出一个a.out,然后./a.out执行程序 gcc -o hello hello.c 输出hello,执行./hello方式2:
gcc -E -o hello.i hello.c gcc -S -o hello.s hello.i gcc -c -o hello.o hello.s gcc -o hello hello.o注意:.o是object file
小结:
1)输入文件的后缀名和选项共同决定gcc执行的操作2)在编译过程中,除非使用了-E、-S、-c选项(或编译过程中出错阻止了完整编译),否则最后的步骤都是链接
方式3:
gcc -c -o hello.o hello.c gcc -o hello hello.osign:
gcc会对.c文件默认进行预处理操作,-c选项再次指明了编译和汇编的步骤,生成.o文件 再通过gcc -o hello hello.o将.o文件进行链接,得到可执行应用程序链接:
链接是将汇编生成的.obj文件、系统库文件链接起来,最终生成可以在特定平台运行的可执行程序crt1.o、crti.o、crtbegin.o、crtend.o、crtn.o是gcc加入的系统标准启动文件,对于一般应用程序这些启动文件是必需的
-lc:链接libc库文件,其中实现了printf等函数
gcc -v -nostdlib -o hello hello.o会提示因为没有链接系统标准启动文件和标准库文件而链接失败
-nostdlib选项常用于裸机/bootloader、linux内核等程序,因为它们不需要启动文件、标准库文件
一般应用程序才需要系统标准启动文件和标准库文件
裸机/bootloader、linux内核等程序不需要启动文件、标准库文件
动态链接:
动态链接使用动态链接库进行链接,生成的程序在执行时需要加载所需的动态库才能运行动态链接生成的程序体积较小,但必须依赖所需的动态库,否则无法执行
静态链接:
静态链接使用静态库进行链接,生成的程序包含程序运行所需的全部库,可以直接运行,但程序体积较大gcc -c -o hello.o hello.c
gcc -o hello_shared hello.o gcc -static -o hello_static hello.o//******************************************************************************//