C程序在linux上的编译

GCC可以用来编译C/C++、FORTRAN、JAVA、OBJC、ADA等语言的程序,可根据需要选择安装支持的语言,在嵌入式学习中,目前只去关注gcc在C语言方面的编译功能


第一:支持文件

.c   C语言源代码

.C,.cc,.cxx    C++源代码文件且必须要经过预处理

.h   程序所包含的头文件

.i   已经预处理过的C源代码文件,且不应该对其执行预处理;

.ii  已经预处理过的C++源代码文件,且不应该对其执行预处理;

.m   Objective-C源代码文件;

.mm   Objective-C++源代码文件;

.s   汇编语言源代码文件

.S   预编译过的汇编语言源代码文件。

.o   编译后的目标文件s


第二:了解交叉编辑器 / 交叉连接器 / 交叉编译环境  (本段文字部分参考:https://www.cnblogs.com/yangguang-it/p/6916769.html

      嵌入式产品的资源往往有限,它的资源和我们平时用的桌面计算机(后面称为开发主机,host machine)一样,那就不需要交叉编译了。但是,嵌入式系统的内存通常是几十兆字节,且只有闪存而没有硬盘这种大容量存储设备。在这种资源有限的环境中,不可能将开发工具安装在嵌入式设备中(后面称为目标机,target machine),然后像平时做桌面软件开发那样在嵌入式设备上直接进行软件开发,因此,嵌入式的开发工作一般是在主机上进行的。

      当目标机的处理器和主机的处理器不同时(比如目标机是ARM处理器,而主机是X86处理器),如何保证在主机上编译的程序可以在目标机上运行呢?

       在使用gcc编辑器时,

I:可以指定目标机处理器和开发主机处理器型号,型号不一致,生成交叉编译器。编译器在指定开发主机上运行,编译器生成程序仅运行于目标主机。

II:可以不指定(默认目标机和开发主机型号相同编译环境相同)

       gcc会对源代码完成四步操作:


第三:命令  (本部分参考:https://blog.csdn.net/Crazy_Tengt/article/details/71699029

1,无选项编译链接

例:命令:gcc test.c  //默认生成a.out(默认名称,名称可以指定 -o:gcc test.c -o test)可执行程序

2,-E   进行预处理,编译,生成汇编文件

例:gcc -E test.c   //会生成test.i文件

3,-S   进行预处理,编译,汇编,生成汇编文件

例:gcc -E test.c   //会生成test.s文件

4,-c    直接生成二进制目标文件

例:gcc -c test.c   //会生成test.o文件

5,-o    对文件重命名(如第一条)

6,-w    不生成任何警告信息

7,-wall  生成所有警告信息

8,   -g     附加调试信息

猜你喜欢

转载自blog.csdn.net/w6655515/article/details/81099494