当前位置: 首页 > Linux

helloword程序在Linux系统上的生活

时间:2023-04-06 07:14:56 Linux

记录了C语言程序helloworld在Linux系统上从编写、编译到调用的全过程。1、编写经典的helloworld程序源码。hello.c的源码如下:#includeintmain(){printf("hello,world\n");}程序员在IDE或文本编辑器中输入源码在浏览器(如Vim、Emacs等)中运行程序,保存为文本文件hello.c,文件后缀为.c。文件的内容是由0和1组成的位串,每8位组成一组,称为一个字节,所以文件也可以说是由字节串组成的。大多数计算机使用ASCII码来表示英文字母和符号。因此,对于上面的源代码,每个字符都作为一个字节存储在文件中。在ASCII编码标准中,每个字符对应一个唯一的8位字符串,即每个字符对应一个字节值。例如,#对应一个整数值为35的字节,i对应另一个整数值为105的字节,依此类推。对于中文这样的字符,由于字符很多,用一个字节来比较一个字符是不够的(因为一个字节最多可以表示256个字符)。因此,如果文件中包含中文等字符,则文件中的字符一般采用unicode编码表示。从位串层面,所有的信息都被表示为一串0和1,这些0和1是被解释为英文字符、汉字、整数还是浮点数,是由上下文决定的。所以信息是位串+上下文。2.编译成可执行文件源代码需要编译成可执行文件。对于Linux系统上的C源程序hello.c,一般调用gcc程序进行编译:linux>gcc-ohellohello.c编译过程会经历以下四个阶段:1.预处理阶段在预处理阶段,预处理程序cpp将#include指令处文件中的空格插入到当前源程序中,在源代码中展开宏等操作。经过处理,生成了一个后缀为.i的C语言源程序hello.i。2、在编译阶段,编译程序cc将C源程序hello.i翻译成汇编源程序,输出hello.s。3、在汇编阶段,编译程序as将汇编源程序hello.s翻译成机器语言指令文件,输出目标文件hello.o,也称为可重定位目标程序。hello.o已经是二进制文件,但还不是可执行文件。因为我们的程序中还没有包含printf等函数的目标文件。4.链接阶段的printf函数包含在另一个预编译目标文件printf.o中。连接器ld将这些第三方目标文件和hello.o合并为一个文件,最终生成我们的可执行文件hello.o。3、调用和执行我们的可执行文件hello是存放在硬盘中的,可以在shell中调用和执行:linux>./hellohello,worldlinux>shell是一个命令行解释器,输出提示符,等待用户输入命令名称,一旦用户输入命令名称并按回车键确认。shell读取程序的内容并执行它。以执行hello为例。shell程序运行后,就等待我们输入命令。当我们输入./hello时,shell将每个字符读入一个寄存器并存储在内存中。当回车键输入时,shell知道输入完成,然后将hello文件的内容从硬盘复制到内存中。之后,处理器依次执行内存中hello程序的机器指令,将hello程序数据段中的hello,world\n字符串中的每个字符依次从内存中复制到寄存器中,然后从寄存器复制到显示设备。实现hello,world字符串的输出。