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上的多余空闲内存称为堆区。
Linux C :Linux 下第一个C程序相关推荐
- linux加法计算器程序,Linux下实现一个计算器程序
(集体内容详见ChinaUnix社区) 现在要在Linux下实现一个计算器程序, 它有如下的要求: 1. 能识别英文数字:比如 three hundred and ninety two, 要能转换为 ...
- linux应用程序的编写实验原理,操作系统实验 1.在linux下编写一个应用程序 联合开发网 - pudn.com...
操作系统实验 所属分类:Linux/Unix编程 开发工具:C/C++ 文件大小:1KB 下载次数:3 上传日期:2019-05-01 20:34:21 上 传 者:烟雨南风起 说明: 1.在lin ...
- eclips下第一个java程序 hello world!
eclips下第一个java程序 hello world!
- Linux下第一个java程序没有成功
当前是CentOS5.5: 进入vim编辑一个java helloworld程序: 系统自带OpenJDK 1.6.0: javac编译:提示没有javac命令: 找一下OpenJDK的安装目录:不知 ...
- Linux环境下编写一个shell程序,此程序的功能:随机生成一个1-100的数(答案)让用户猜
题目:编写一个shell程序,此程序的功能:随机生成一个1-100的数(答案)让用户猜,如果用户猜的数大于答案,则提示大了,如果用户猜的数小于答案,则提示小了.当用户猜对时提示:猜对了. #! /bi ...
- c语言代码 linux 关机_linux下c语言关机程序
linux下c语言关机程序 /* Offtimer.c.For auto halt. */ #include #include #include #define DELAY 60/* Time of ...
- 怎么用记事本写java_如何用记事本写下第一个Java程序-Fun言
在刚学java的时候,刚开始并未接触类似于Myeclipse这类的编辑器,都是用记事本编写程序,这样虽然很慢,但是能让我们明白其中的原理,所以今天来教大家用记事本来写第一个java程序"He ...
- macos调试linux内核,Mac下 XX 及任意程序的内置浏览器调试的实现
本帖最后由 zwo 于 2019-12-5 22:41 编辑 0x0 前言 在iOS以及Mac上,Safari提供了功能强大的基于webkit的调试器功能,方便开发者调试APP的内置浏览器.在某聊天软 ...
- Linux系统编程下做一个简易的shell
自主实现一个shell--------minshell shell:命令行解释器-------解释执行用户的输入(完成相对应的功能) 步骤 1. 获取标准输入中的字符串 2. 对字符串进行解析[ls ...
最新文章
- iOS开发——手势识别器(用手势实现图片旋转和缩小放大)
- Java HasCode equals == 的区别
- Java基于自定义注解的面向切面的实现
- 简单的文本设计就能影响游戏体验?游戏中提升玩家体验的小设计
- 为什么对gRPC做负载均衡会很棘手?
- 字符串:你看的懂的KMP算法(带验证)
- 两百个jQuery插件集合
- C文件操作——ftell函数_ferror函数_clearerr函数_rewind函数
- c语言数组实现冒泡排序
- 前端特效 —— 八卦图旋转(纯css)
- 《计算机操作系统》| 第一章 操作系统引论 知识梳理
- 揭秘淘宝286亿海量图片存储与处理架构
- 感性电路电流计算_电路分析基础(10)-电路以及信号的功率和能量
- python 1加到100的三种方法
- linux解压该文件,linux上解压缩文件
- gdc服务器ssl证书不一致,如何解决SSL证书不匹配错误
- 高性能平台设计——美团旅行结算平台实践
- Day1_Python基础
- WebLogicServer BEA-000386 Weblogic启动报错
- blog微服务架构代码_DDD+微服务大型案例:Uber如何从复杂的RPC微服务转向面向业务领域的微服务架构DOMA? -优步工程博客...