首页 > 编程知识 正文

编译器有哪些,clang和gcc

时间:2023-05-06 08:37:26 阅读:120332 作者:1278

gcc是“GNU Compiler Collection”的缩写,从字义上可以看出是编译器集合。 gcc不仅可以用于编译器c语言,还可以用于c、java、object-C等语言程序。 但是,在这里,在我们的嵌入式学习中,现在只关注gcc在c语言方面的编译功能。

.什么是交叉编译器

在嵌入式系统的开发中,经常使用与交叉编译相关的术语,例如交叉编译器、交叉连接器、交叉编译环境等。

嵌入式产品的资源往往有限,如果该资源与我们平时使用的台式计算机(以下简称开发主机或主机、主机机器)相同,就不需要交叉编译。 嵌入式系统的内存通常为几十兆字节,没有硬盘这样的大容量存储设备,只有闪存。 在这些资源有限的环境中,开发工具不能安装在嵌入式设备(以下称为目标计算机或目标机器)上,并且不能像平时进行桌面软件开发那样直接在嵌入式设备上进行软件开发因此,嵌入式开发工作一般在主机上进行。

在中,如果目标机器的处理器和主机的处理器不同,例如,如果目标机器是ARM处理器,主机是X86处理器,则在主机上编译的程序可以在目标机器上运行

使用编译gcc时,必须指定目标处理器和主机处理器的型号。 如果未指定,则认为主机与目标相同,且与当前编译的环境匹配。 在gcc编译期间,如果指定的主机和目标计算机的处理器型号不匹配,则生成的编译器是“交叉编译器”(cross compiler )。 也就是说,生成的编译器在指定的主机上进行编译活动,而编译器生成的程序在目标计算机上运行。

gcc完成代码预处理、编译、汇编和链接四个步骤。

注意:组件文件的后缀为s(sydsb ),后期阶段未进行预处理操作,因此不能在此处写预处理语言失常的冰棍。 组件文件的后缀为s (s ),用于预处理、装配等操作,可以在此处包含预处理指令。

gcc实用程序选项:

-S :生成程序集

-I :指定头文件的路径

-g :包含调试信息

-On:n=0~3,编译器优化,n越大,优化水平越高

-Wall :提示更多警告消息

-D :在编译器中定义宏。 请注意-D和宏之间没有空间

-E :生成预处理文件

-仅-c:编译,无链接

-C指示预处理器不要放弃注释。 配合`-E '选项使用。

-M :生成与用于makefile的. c和头文件的依赖关系,包括系统库头文件

-MM :为makefile生成与. c和头文件的依赖关系。 不包括系统库的头文件

-o :生成目标文件。 eg: -o filename。 将进行gcc处理的结果保存为filename。 如果忽略此选项,则假设生成的可执行文件默认值为a.out、源文件为file.c、目标文件为file.o、程序集文件为file.s。

gcc -v可以显示gcc的版本信息,但在gcc -v之后添加源文件(例如gcc -v main.c )可以获取gcc使用的系统头文件。

添加源文件选项:

生成地图文件

gcc的-Wl选项用于指定传递给连接器的选项,-Map=main.map选项从gcc传递给连接器,并仅在连接器上生成名为main.map的地图文件。 如果使用-Wl选项,则必须用逗号分隔多个后续选项。

映射文件除了nm工具获取的信息外,还包含更详细的信息,例如每个元件来自哪个库,以及来自库中的哪个目标文件。

在链接选项中:

参考链接: http://blog.chinaunix.net/uid-20528014-id-358180.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。