linux下几种目标文件的分析

linux下几种目标文件的分析,第1张

典型的目标文件分为以下3种形式:

1、可重定位目标文件:这种文件包含二进制代码和数据,这些代码和数据已经转换成了机器指令代码和数据。但是这种可重定位的目标文件还不可以直接执行,原因是这些指令和数据中往往引用其他模块(目标文件)中的符号。这些其他模块的符号对于本模块来说是未知的。这些符号的解析需要链接器将所有的模块进行链接。这种 *** 作成为“重定位”,因此这种目标文件成为“可重定位的目标文件”的后缀名通常是.o。

2、可执行目标文件:这种文件同样包含二进制代码和数据。所不同的是,这种文件已经经过了链接 *** 作,和所有的模块(目标文件)都产生了联系。链接器将所有需要的可重定位目标文件链接成为一个可执行目标文件。这时,每个目标文件中引用其他目标文件中的符号都已经得到了解析和重定位。因此每个符号都是已知的了,该文件可以被机器直接执行。

3、共享目标文件:这是一种特殊类型的可定位目标文件,可以在需要它的程序运行或者加载时,动态地加载到内存中运行。这种文件的后缀名通常是.so。共享目标文件又称为“动态库”文件或者“共享库”文件。

linux gcc编译c文件头文件

linux gcc编译c文件头文件,使用GCC编译器编译C语言

凶猪下山

转载

关注

0点赞·1047人阅读

GCC编译C源代码有四个步骤:预处理—->编译—->汇编—->链接。

可以利用GCC的参数来控制执行的过程,这样就可以更深入的了解编译C程序的过程。

下面将通过对一个程序的编译来演示整个过程。

#include

int main()

{

printf("happy new year!\n")

return 0

}

1:预处理:编译器将C程序的头文件编译进来,还有宏的替换,可以用gcc的参数-E来参看。

预处理 命令:gcc -E hello.c -o hello.i

作用:将hello.c预处理输出hello.i

2:编译:这个阶段编译器主要做词法分析、语法分析、语义分析等,在检查无错误后后,把代码翻译成汇编语言。可用gcc的参数-S来参看。

编译器(ccl)将文本文件hello.i 翻译成文本文件hello.s, 它包含一个汇编语言程序。汇编语言程序中的每条语句都以一种标准的文本格式描述了一条低级机器语言指令。

编译命令:gcc -S hello.i -o hello.s

作用:将预处理输出文件hello.i汇编成hello.s文件

3:汇编:把编译阶段生成的.s 文件转换为二进制目标代码。可用gcc的参数-c来参看。汇编器(as)将hello.s翻译成机器语言指令,把这些指令打包成可重定位目标程序的格式, 并将结果保存在目标文件hello.o中。hello.o文件是一个二进制文件,它的字节编码是机器语言。

汇编 命令:gcc -c hello.s -o hello.o

作用:作用:将汇编输出文件hello.s编译输出hello.o文件

4:链接:把obj文件链接为可执行的文件:链接器(ld)负责.o文件的并入。结果就是hello文件,它是一个课执行的目标文件,可以加载到存储器后由系统调用。

链接命令:gcc hello.o -o hello

一步 *** 作的话是: (-o必须在hello之前 )

$gcc hello.c -o hello

$./hello或者:(会默认生成a.out文件)

$gcc hello.c

$./a.out

xserver 本身就支持远程运行,而且 X server 也支持远程登录而且根本不影响当前用户的环境。

这是服务器系统的根本功能。要不然一个计算机就一个显示器,N 个人登录只能排队?

貌似装个 VNC 就直接能实现。X server 我记得有两种远程图形界面显示,一种是服务器本地渲染后发送图像信息,但性能你肯定知道的。还一种就是本地不渲染,只运行,渲染在客户端进行,这样速度快,但似乎软件环境要求高一些。

这样是单独一个登录 session ,所有的程序都在这个会话里面,和别人的运行状况没关系。

具体怎么搞我就不知道了。没用过这个功能。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/9033905.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-24
下一篇 2023-04-24

发表评论

登录后才能评论

评论列表(0条)

保存