2012—07—03 星期二
2012-07-06 21:56
267 查看
上午讲了嵌入式Linux的开发工具:编译器gcc,调试器dgb,工程管理器make。
GNU CC(简称为gcc)是GNU项目中符合ANSI
C标准的编译系统,能够编译用C、C++和Objectv
C等语言编写的程序。
下午,编程,main.c,add.c,sub.c,mul.c,devide.c,add.h,sub.h,mul.h,devide.h。
老师布置的作业:
-f
使用档案文件或设备,这个选项通常是必选的。
-z
用gzip来压缩/解压缩文件,加上该选项后可以将档案文件进行压缩,但还原时也一定要使用该选项进行解压缩。
-x
从档案文件中释放文件。
小写的-v,作用是让tar命令输出更多的提示信息,比方说,加了-v后,你在打包的时候就会输出被打包的文件的名字。
大写的-V的用法是
-V label-name
作用是给打好的包加上一个label,比方说
tar -V ppp -cf my.tar test/
就把test目录打包到my.tar,同时这个打包文件的label是ppp。
-p
恢复字段到它们的原始方式,忽略现有的用户权限屏蔽位(umask)。 setuid、setgid
和 tacky
位许可权也恢复给拥有 root
用户权限的用户。这个标志恢复文件到其原始方式,但不恢复目录到其原始方式。
-s 如果 tar
命令未能使用 -s
标志成功尝试链接(常规链接)两个文件,请试着创建符号链接。
-p或--same-permissions
用原来的文件权限还原文件。
-P或--absolute-names
文件名使用绝对名称,不移除文件名称前的"/"号。
c语言程序编译过程分两步。第一步,形成 obj
文件,第二步,形成 exe
文件。从 obj
到exe
的过程叫链接
重定位是将符号引用与符号定义进行链接的过程。因此链接是处理可重定位文件,把它们的各种符号引用和符号定义转换为可执行文件中的合适信息(一般是虚拟内存地址)的过程。链接又分为静态链接和动态链接,前者是程序开发阶段程序员用ld(gcc实际上在后台调用了ld)静态链接器手动链接的过程,而动态链接则是程序运行期间系统调用动态链接器(ld-linux.so)自动链接的过程。比如,如果链接到可执行文件中的是静态连接库libmyprintf.a,那么.
rodata节区在链接后需要被重定位到一个绝对的虚拟内存地址,以便程序运行时能够正确访问该节区中的字符串信息。而对于puts,因为它是动态连接库libc.so中定义的函数,所以会在程序运行时通过动态符号链接找出puts函数在内存中的地址,以便程序调用该函数。在这里主要讨论静态链接过程,动态链接过程见《动态符号链接的细节》。
静态链接过程主要是把可重定位文件依次读入,分析各个文件的文件头,进而依次读入各个文件的节区,并计算各个节区的虚拟内存位置,对一些需要重定位的符号进行处理,设定它们的虚拟内存地址等,并最终产生一个可执行文件或者是动态链接库。这个链接过程是通过ld来完成的,ld在链接时使用了一个链接脚本(linker
script),该链接脚本处理链接的具体细节。由于静态符号链接过程非常复杂,特别是计算符号地址的过程,考虑到时间关系,相关细节请参考ELF手册[6]。这里主要介绍可重定位文件中的节区(节区表描述的)和可执行文件中段(程序头描述的)的对应关系以及gcc编译时采用的一些默认链接选项。
GNU CC(简称为gcc)是GNU项目中符合ANSI
C标准的编译系统,能够编译用C、C++和Objectv
C等语言编写的程序。
下午,编程,main.c,add.c,sub.c,mul.c,devide.c,add.h,sub.h,mul.h,devide.h。
老师布置的作业:
-f
使用档案文件或设备,这个选项通常是必选的。
-z
用gzip来压缩/解压缩文件,加上该选项后可以将档案文件进行压缩,但还原时也一定要使用该选项进行解压缩。
-x
从档案文件中释放文件。
小写的-v,作用是让tar命令输出更多的提示信息,比方说,加了-v后,你在打包的时候就会输出被打包的文件的名字。
大写的-V的用法是
-V label-name
作用是给打好的包加上一个label,比方说
tar -V ppp -cf my.tar test/
就把test目录打包到my.tar,同时这个打包文件的label是ppp。
-p
恢复字段到它们的原始方式,忽略现有的用户权限屏蔽位(umask)。 setuid、setgid
和 tacky
位许可权也恢复给拥有 root
用户权限的用户。这个标志恢复文件到其原始方式,但不恢复目录到其原始方式。
-s 如果 tar
命令未能使用 -s
标志成功尝试链接(常规链接)两个文件,请试着创建符号链接。
-p或--same-permissions
用原来的文件权限还原文件。
-P或--absolute-names
文件名使用绝对名称,不移除文件名称前的"/"号。
c语言程序编译过程分两步。第一步,形成 obj
文件,第二步,形成 exe
文件。从 obj
到exe
的过程叫链接
重定位是将符号引用与符号定义进行链接的过程。因此链接是处理可重定位文件,把它们的各种符号引用和符号定义转换为可执行文件中的合适信息(一般是虚拟内存地址)的过程。链接又分为静态链接和动态链接,前者是程序开发阶段程序员用ld(gcc实际上在后台调用了ld)静态链接器手动链接的过程,而动态链接则是程序运行期间系统调用动态链接器(ld-linux.so)自动链接的过程。比如,如果链接到可执行文件中的是静态连接库libmyprintf.a,那么.
rodata节区在链接后需要被重定位到一个绝对的虚拟内存地址,以便程序运行时能够正确访问该节区中的字符串信息。而对于puts,因为它是动态连接库libc.so中定义的函数,所以会在程序运行时通过动态符号链接找出puts函数在内存中的地址,以便程序调用该函数。在这里主要讨论静态链接过程,动态链接过程见《动态符号链接的细节》。
静态链接过程主要是把可重定位文件依次读入,分析各个文件的文件头,进而依次读入各个文件的节区,并计算各个节区的虚拟内存位置,对一些需要重定位的符号进行处理,设定它们的虚拟内存地址等,并最终产生一个可执行文件或者是动态链接库。这个链接过程是通过ld来完成的,ld在链接时使用了一个链接脚本(linker
script),该链接脚本处理链接的具体细节。由于静态符号链接过程非常复杂,特别是计算符号地址的过程,考虑到时间关系,相关细节请参考ELF手册[6]。这里主要介绍可重定位文件中的节区(节区表描述的)和可执行文件中段(程序头描述的)的对应关系以及gcc编译时采用的一些默认链接选项。
相关文章推荐
- 中国制造业PMI走势 官方VS汇丰 2009-07到2012-03
- 日报_2012_07_03
- Windows Server 2012 R2 文件服务器安装与配置03 之文件服务器配置共享
- 20170710L07-09-03老男孩Linux运维实战培训-Sersync实时同步软件实战应用指南07
- [笔记]I 群聊天记录2012/03/中
- poi导入Excel,兼容03/07版本
- 03-07 创建和编辑AutoCAD实体(七) 向图形中添加文字(2)使用单行文字
- 在Javaweb中poi实现数据导入,支持03版和07版Excel导入
- C# 对word (03、07)的相关操作
- [导入]【03-27】【美国】【07最新恐怖大片】《夺命停车场》【DVD中英双字幕】【22:45发布】
- 日报_2012_07_04
- Windows Server 2012 R2 文件服务器安装与配置03 之文件服务器配置共享
- 五大浏览器对 HTML5 CSS3的支持 (2012-07)
- ConcurrentAsyncQueue 2012-07-21
- 日报_2012_07_21
- Windows Server 2012 R2 DHCP安装与配置之03 DHCP负载均衡与双机热备
- microsoft office 03、07、10 的简单方法完全卸载, win7、win8、xp 均可
- 源码03-02-07-LoadView
- JAVA 解析excel兼容03 和07
- POI的导出03和07版最大行数