Linux下编译C文件的过程

1、首先,写一个简单的C源文件:HelloWorld

#include <stdio.h>int main(){ printf("/nHello World!/n/n"); return 0;}

2、下面是调用gcc命令编译HelloWorld.c的过程:

[root@localhost gcc_test]# ls -l
total 4
-rw-r--r-- 1 root root 78 Sep 11 00:17 HelloWorld.c

// gcc的-E选项,可以让编译器在预处理后停止,并输出预处理结果。
[root@localhost gcc_test]# gcc -E HelloWorld.c -o step1.i

[root@localhost gcc_test]# ls -l
total 24
-rw-r--r-- 1 root root 78 Sep 11 00:17 HelloWorld.c
-rw-r--r-- 1 root root 18020 Sep 11 00:22 step1.i

// gcc的-S选项,表示在生成汇编代码后停止,-o输出汇编代码文件。
[root@localhost gcc_test]# gcc -S step1.i -o step2.s

[root@localhost gcc_test]# ls -l
total 28
-rw-r--r-- 1 root root 78 Sep 11 00:17 HelloWorld.c
-rw-r--r-- 1 root root 18020 Sep 11 00:22 step1.i
-rw-r--r-- 1 root root 454 Sep 11 00:22 step2.s

// gas汇编器负责将生成的汇编代码文件编译为目标文件
[root@localhost gcc_test]# gcc -c step2.s -o step3.o

[root@localhost gcc_test]# ls -l
total 32
-rw-r--r-- 1 root root 78 Sep 11 00:17 HelloWorld.c
-rw-r--r-- 1 root root 18020 Sep 11 00:22 step1.i
-rw-r--r-- 1 root root 454 Sep 11 00:22 step2.s
-rw-r--r-- 1 root root 880 Sep 11 00:23 step3.o

// gcc连接器,负责将程序的目标文件与所需的所有附加的目标文件连接起来,最终生成可执行文件。附加的目标文件包括静态连接库和动态连接库。
[root@localhost gcc_test]# gcc step3.o -o step4_result

[root@localhost gcc_test]# ls -l
total 40
-rw-r--r-- 1 root root 78 Sep 11 00:17 HelloWorld.c
-rw-r--r-- 1 root root 18020 Sep 11 00:22 step1.i
-rw-r--r-- 1 root root 454 Sep 11 00:22 step2.s
-rw-r--r-- 1 root root 880 Sep 11 00:23 step3.o
-rwxr-xr-x 1 root root 4734 Sep 11 00:23 step4_result

// 执行可执行程序
[root@localhost gcc_test]# ./step4_result

Hello World!

[root@localhost gcc_test]#

3、上述拆分的过程完全可以一步执行:

[root@localhost gcc_test]# gcc HelloWorld.c -o result
[root@localhost gcc_test]# ls -l
total 48
-rw-r--r-- 1 root root 78 Sep 11 00:17 HelloWorld.c
-rwxr-xr-x 1 root root 4734 Sep 11 00:39 result
-rw-r--r-- 1 root root 18020 Sep 11 00:22 step1.i
-rw-r--r-- 1 root root 454 Sep 11 00:22 step2.s
-rw-r--r-- 1 root root 880 Sep 11 00:23 step3.o
-rwxr-xr-x 1 root root 4734 Sep 11 00:23 step4_result
[root@localhost gcc_test]# ./result

Hello World!

[root@localhost gcc_test]#

(0)

相关推荐

  • Linux下的链接文件详解

    几个基本概念 Linux下的链接文件可以分为硬链接(hard link)与软链接(soft link).要理解它们,必须先要理解几个基本概念. inode 文件除了纯数据本身之外,还必须包含有对这些纯 ...

  • Linux下如何对文件进行权限保护以防止文件被人改动

    在Linux系统操作中,为了防止文件被人改动,可以将文件进行权限保护,那么具体要如何做呢?下面小编就给大家介绍下Linux下对文件进行权限保护的方法,一起来学习下吧。 在管理Linux系统的过程中,对 ...

  • 在windows下编译java文件、执行

    在命令行执行java,是非常重要的,无论在开发还是测试中.要使用cmd命令来编译java文件.执行.打包的一个过程,这里只讲述编译和执行过程. 操作方法 01 先创建一个txt,更改为test.jav ...

  • linux下批量替换文件内容的方法

    对于单个文件,使用sed命令很容易做到。如果需要替换某个指定文件夹下所有文件,借助grep和sed组合成一条命令也可以轻松搞定。 grep命令可以查找单个文件或文件夹下文件中的内容,使用参数“r”或“ ...

  • linux下批量替换文件中的内容

    grep命令可以查找单个文件或文件夹下文件中的内容,使用参数“r”或“-R”可以递归查找指定文件夹下的所有文件;参数“l”可以让grep输出包含指定字符串的文件名,首次匹配成功后立刻停止对同文件的查询 ...

  • linux下如何解压缩文件

    linux下可以用ark解压缩文件.ark是一款功能强大的解压缩文件的软件,他可以解压缩rar文件 操作方法 01 ark是linux上一款图形界面的解压缩软件.功能强大,界面如下.可以通过yum 来 ...

  • Linux下查看指定文件夹和文件的大小

    df命令:查看目前所有文件系统的可用空间及使用情况 df可以查看一级文件夹大小、使用比例、档案系统及其挂入点,但对文件却无能为力 复制代码 代码如下: df -lh 参数 -h 表示使用「Human- ...

  • linux下怎么查看文件夹中各个文件的大小

    在操作Linux文件系统时,怎样才能查看某一个文件夹下各个文件及子文件夹的大小呢?下面简单介绍一个很快捷的命令. 操作方法 01 用CRT软件连接一台Linux系统. 02 选择一个含有子文件夹的文件 ...

  • linux下怎样编辑文件保存文件

    我们在linux系统下面经常需要编辑并保存文件,那么如何操作呢?下面小编给大家分享一下. 操作方法 01 首先进入linux系统以后右键单击桌面,选择Open In Terminal选项,如下图所示 ...