Linux C :Linux 下第一个C程序

       我首先用QQ管家下载VMware Workstation中的虚拟机,然后下载Ubuntu64的映像,开启了Linux之路。

       搞了些设置后,成功启动Linux ,添加自身Window 和 虚拟机上Linux的共享目录方便传文件。再添加些软链接(快捷方式)来方便访问文件夹。

      一般刚开始用VIM 编辑本文,操作起来比较不方便。所以一般现在Window上编辑好,然后将文本复制到Linux中。

      首先创建  .c的文件在此下编辑 ,我的时helloworld.c

 

之后  执行 gcc helloworld.c   后编译成 a.out 的二进制文件

如果没下载gcc  可执行    sudo apt install gcc   即可

执行二进制文件并 传入输入参数

 

 

当编译多个文件时 gcc  文件1  文件2   文件3   .......

gcc的编译过程分为三步:

第一步将  文件1.c  文件2.c   文件3.c 分别通过编译器解析成汇编语言   文件1.s  文件2.s   文件3.s     。可执行命令   gcc  -S  文件1.s  文件2.s   文件3.s    只激活预处理,和编译

第二步将   文件1.s  文件2.s   文件3.s 分别通过汇编器  文件1.o  文件2.o   文件3.o      。可执行命令   gcc  -c  文件1.s  文件2.s   文件3.s    只激活预处理,和编译和汇编,生成obj目标代码文件

第三步将这些文件通过链接器生成 out 的可执行文件 如果不想编译出来成  a.out 名字    可执行命令   gcc -o  新文件名   待编译文件名    如 gcc -o hello.exe helloworld.c

gcc 的相关命令 参考菜鸟教程  https://www.runoob.com/w3cnote/gcc-parameter-detail.html

 

 

bss段(Block Started by Symbolsegment)通常是指用来存放程序中未初始化的全局变量和未初始化的静态局部变量的一块内存区域,

汇编代码转成目标代码文件.o包含6部分:

1)文件头:包含代码段,数据段和BSS段的大小

2)代码段: 包含机器指令

3) 数据段:包含了初始化全局变量和初始化静态数据

4) bss 段:存放程序中未初始化的全局变量

5) 指针以及数据和bss 中的偏移量和重定位信息

6) 符号表 : 包含非静态全局变量、函数名称及其属性

 

合成a.out 的文件过程中将文件头的数据大小,代码段,bss段,数据段 通过符号表中的引用信息来进行合并。

生成出来的a.out 文件包含四部分内容:

1) 文件头 : 包含了文件的加载信息和大小,其中

    1.1) tsize = 代码段大小

    1.2) dsize = 包含了初始化全局变量和初始化静态局部变量的数据段大小。

    1.3) bsize  =包含了未初始化的全局变量和未初始化的静态局部变量的bss段大小。

     1.4) total_size =加载  a.out文件的总大小

2)代码段:包含了可执行代码

3)数据段: 包含了初始化全局变量和初始化静态数据

4)符号表: 可选,用于调式。

要注意的是bss中的数据和自动局部变量并没用存放在 a.out中。通常来讲   bsize   =total_size  - tsize - dsize   。bss段用于程序执行期间的动态内存分配,bss上的多余空闲内存称为区。

 

Guess you like

Origin blog.csdn.net/superSmart_Dong/article/details/115772221