Linux系统GCC常用命令和GCC编译过程描述

前言:

GCC 原名为 GNU C 语言编译器(GNU C Compiler),因为它原本只能处理 C语言。GCC 很快地扩展,变得可处理 C++。后来又
扩展能够支持更多编程语言,如Fortran、Pascal、Objective-C、Java、Ada、Go以及各类处理器架构上的汇编语言等,所以改

名GNU编译器套件(GNU Compiler Collection)。(百度百科,想了解自己查询)

一.GCC程序的编译过程大概分四个阶段

  • 预处理(Pre-Processing)
  • 编译(Compiling)
  • 汇编(Assembling)
  • 链接(Linking)

二.简单HelloWorld程序的编译过程

示例:HelloWorld.c

1 #include <stdio.h>
2 int main()
3 {
4   printf("Hello World!\n");
5   return 0;
6 }

Ctrl+Alt+T  --->打开控制台--->输入vim HelloWorld.c

1. 执行如下命令:$ gcc -o HelloWorld HelloWorld.c


运行如下 : $ ./HelloWorld
输出: HelloWorld!


2. 分步编译如下:
(1) $ gcc –E HelloWorld.c -o HelloWorld.i

可以输出HelloWorld.i文件中存放着HelloWorld.c经预处理之后的代码。打开HelloWorld.i文件,看一看,就明白了。后面那条指令,是直接在命令行窗口中输出预处理后的代码.

gcc的-E选项,可以让编译器在预处理后停止,并输出预处理结果。在本例中,预处理结果就是将stdio.h 文件中的内容插入到HelloWorld.c中了。


//预处理结束
//这时候你看一下HelloWorld.i ,可以看到插进去了很多东西。


(2) $ gcc –S HelloWorld.i

gcc的-S选项,表示在程序编译期间,在生成汇编代码后,停止,-o输出汇编代码文件。

查看下HelloWorld.s //生成汇编代码后结束

(3)生成汇编代码文件HelloWorld.s以后,需要gas汇编器负责将其编译为目标文件,如下:

$ gcc –c HelloWorld.c
或者:
$ gcc -c HelloWorld.c –o HelloWorld.o
或者:
$ gcc -c HelloWorld.i -o HelloWorld.o

//编译结束
//生成 HelloWorld.o文件

(4) $ gcc HelloWorld.o –o HelloWorld 生成连接,可执行文件(HellWorld重新生成的可执行文件)

gcc连接器是gas提供的,负责将程序的目标文件与所需的所有附加的目标文件连接起来,最终生成可执行文件。

附加的目标文件包括静态连接库和动态连接库。

对于上一小节中生成的HelloWorld.o,将其与C标准输入输出库进行连接,最终生成程序HelloWorld可执行文件

输入命令:gcc HelloWorld.o –o HelloWorld--->生成如下图:

3. 多个程序文件的编译

一般情况一个程序都是有若干个文件源文件组成,所以编译的时候需要形成多个编译单元,使用GCC编译器可以将多个源文件编译成所需要的程序

比如:源文件有main.c     a.c     b.c  最终生成一个可执行的文件main

比如:一个工程有main.c a.c b.c生成test的可执行文件。
编译命令如下:
$ gcc –c main.c a.c b.c –o main
或者:
$ gcc –o main main.c a.c b.c

GCC仍然会按照预处理、编译和链接的过程依次进行

大概过程相当于:

gcc -c main.c -o main.o

gcc -c a.c -o a.o

gcc -c b.c -o b.o

最后:

gcc main.o a.o b.o -o main

时间: 2024-10-13 00:20:35

Linux系统GCC常用命令和GCC编译过程描述的相关文章

Linux系统巡检常用命令

# uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cpuinfo # 查看CPU信息 # hostname # 查看计算机名 # lspci -tv # 列出所有PCI设备 # lsusb -tv # 列出所有USB设备 # lsmod # 列出加载的内核模块 # env # 查看环境变量 # free -m # 查看内存使用量和交换区使用量 # df -h # 查看各分区使用情况 # du -s

linux系统-文件系统-常用命令

linux系统-文件系统-常用命令 一 常用命令 1 查看分区情况:df [-h] 2 查看文件和目录的大小:du 3 查看文件的详细参数:stat 4 校验文件的md5的值:md5sum 5 检测修复文件系统:fsck,e2fsck(单用户模式卸载文件系统后执行) 二 添加硬盘的分区 1 划分分区:fdisk /dev/sdb 2 创建文件系统:mkfs.ext3 /dev/sdb1 3 尝试挂载:mount /dev/sdb1 /mnt/test 4 写入配置文件以便reboot自动挂载:/

Linux系统之-常用命令及技巧

一. 通用命令:1.date :print or set the system date and time2. stty -a: 可以查看或者打印控制字符(Ctrl-C, Ctrl-D, Ctrl-Z等)3. passwd: print or set the system date and time (用passwd -h查看)4. logout, login: 登录shell的登录和注销命令5. pwd: print or set the system date and time6. more

用xshell操作linux系统的常用命令

(1)命令ls——列出文件 ls -la 给出当前目录下所有文件的一个长列表,包括以句点开头的“隐藏”文件 ls a* 列出当前目录下以字母a开头的所有文件 ls -l *.doc 给出当前目录下以.doc结尾的所有文件 (2)命令cp——复制文件 cp afile afile.bak 把文件复制为新文件afile.bak cp afile /home/bible/ 把文件afile从当前目录复制到/home/bible/目录下 cp * /tmp 把当前目录下的所有未隐藏文件复制到/tmp/目

LINUX系统监控常用命令

1.进程监控(TOP) Linux下的Top命令是一个性能监控程序,用来监控Linux性能,在许多Linux或者类Unix操作系统里都有这个命令. Top命令用于按一定的顺序显示所有正在运行而且处于活动状态的实时进程,而且会定期更新显示结果.这条命令显示了CPU的使用率.内存使用率.交换内存使用大小.高速缓存使用大小.缓冲区使用大小,进程PID.所使用命令以及其他.它还可以显示正在运行进程的内存和CPU占用多的情况. 进程PID,进程用户,CPU使用率,内存使用率.交换内存使用大小等等信息.to

Linux系统的常用命令

常用命令 1.日期时间 date:查看.设置当前系统时间 hwclock显示硬件时钟时间 cal查看日历 uptime查看系统运行时间 2.输出.查看命令 echo:用以显示输入的内容 cat:用以显示文件夹内容 head:用以显示文件的头几行(默认10行) 参数:-n指定显示的行数 命令tail:用以显示文件的末尾几行(默认10行) 数:-n指定显示的行数 -f追踪显示文件更新(一般用于查看日志,命令不会退出,而是持续显示新加入的内容) 命令more:用于翻页显示文件内容(只能向下翻页) 命令

Linux 系统监控常用命令

简介 列举操作系统级监控常用的几个方法,建议收藏使用 CPU top 命令可用于监控系统整体负载,包括cpu.内存使用等,能够实时显示系统中各个进程的资源占用状况 输出样例 top - 19:37:41 up 192 days, 9:14, 1 user, load average: 0.39, 0.28, 0.27 Tasks: 126 total, 1 running, 125 sleeping, 0 stopped, 0 zombie Cpu(s): 0.1%us, 0.1%sy, 0.0

使用 Linux 系统的常用命令

(1)切换到目录 /usr/bin: $ cd /usr/bin (2)查看目录/usr/local 下所有的文件: $cd /usr/local $ls -al (3)进入/usr 目录,创建一个名为 test 的目录,并查看有多少目录存在: $ cd /usr $ mkdir test $ ls -al (4)在/usr 下新建目录 test1,再复制这个目录内容到/tmp: $ cd /usr $ mkdir test1 $ sudo cp -r /usr/test1 /tmp (5)将上

嵌入式Linux GCC常用命令

本文和大家分享的主要是嵌入式Linux GCC常用命令相关内容,一起来看看吧,希望对大家学习嵌入式Linux有所帮助. 1.简介 GCC 的意思也只是 GNU C Compiler 而已.经过了这么多年的发展,GCC 已经不仅仅能支持 C 语言:它现在还支持 Ada 语言.C++ 语言.Java 语言.Objective C 语言.Pascal 语言.COBOL语言,以及支持函数式编程和逻辑编程的 Mercury 语言,等等.而 GCC 也不再单只是 GNU C 语言编译器的意思了,而是变成了