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 ...
最新文章
- C++中的两种绑定方式(静态绑定、动态绑定)
- April Fools Contest 2018
- 使用Hybris Commerce API返回当前客户持有的所有优惠券
- oracle 基本异常的练习及各个错误码
- 前端学习(2617):删除品牌
- 解决response.setHeader(Content-disposition 中文乱码问题
- ubuntu下开机自动运行脚本以及定时任务的处理
- ios根号怎么打_ios计算器开根号 苹果手机计算器怎么开根号 详情介绍
- svn提交变慢,svn update提示Node remains in conflict报错解决办法
- 怎样设计一个好的社交网站
- 深入理解WKWebView白屏
- 小程序重构 [cnode社区]:mpvue + 开源api,现已上线!
- 如何解决您与此网站之间建立的连接不安全,该页面采用不加密的http传输协议?
- Android版本对照
- 无公网IP,外网远程连接MySQL数据库
- 命悬一线丨33岁程序员垂死经历为所有人敲响警钟!
- Ubuntu20.04启动paraFoam失败
- hihocoder-#1014 : Trie树
- seo必备网站分析工具,关键词百度搜索结果查询导出源码
- 网络工程师常见面试问题