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.o

sign:

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

//******************************************************************************//

上一篇:嵌入式Linux之字符设备的驱动
下一篇:基于ARM9 编写LED汇编程序

发表评论

最新留言

关注你微信了!
[***.104.42.241]2025年05月09日 22时26分11秒