![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编译、链接、库
文章平均质量分 57
修行在人间
哈尔滨工业大学电气工程及其自动化专业,2016年本科毕业,工作前两年从事嵌入式软件开发,2019年起转行互联网it,从事服务端后台开发。个人vx,欢迎关注,原创技术相关优质文章,可搜索 itsrohan
展开
-
20171107-程序员的自我修养
今天看 C++在编译链接过程中的相关问题。C++由于类的特殊性,一些内容必须由编译器和链接器共同支持才能完成工作(重复代码消除,构造函数,析构函数)。而且C++中的一些特性如虚函数、重载、继承等,背后的数据结构非常复杂,还会导致不同编译器和链接器之间相互不能通用。首先看了4.4.1,重复代码消除C++的某些特性会出现:在多个编译单元内多次被实例化的情况,如果简单的将重复的代码都原创 2017-11-07 21:44:31 · 144 阅读 · 0 评论 -
20171109-程序员的自我修养
今天看4.5-静态库链接静态库可以看做是一组目标文件的集合。操作系统的开发者编译出相应的目标文件,如:输入输出的printf.o,scanf.o文件操作的fread.o,fwrite.o时间日期的date.o,time.o内存管理的malloc.o等等等等如果直接将这些目标文件给库的使用者(即应用程序开发者),则会造成文件传输、管理和组织上的不便,因此,将一组目原创 2017-11-09 21:50:22 · 149 阅读 · 0 评论 -
20171101-程序员的自我修养
程序员的自我修养-第三章原创 2017-11-01 21:29:31 · 208 阅读 · 0 评论 -
20171102-程序员的自我修养
记录学习笔记因为这本书有些地方过于深奥,第一次读的时候先跳过了一些难懂的地方,今天看到了:强符号和弱符号变量重定义的链接错误产生原因:多个目标文件中含有相同名字的符号的定义,且都为强符号。.强符号:编译器默认函数和进行了初始化的全局变量为强符号。弱符号:未初始化的全局变量。注意:符号的强弱都是针对定义来说的,不针对引用(extern)如上,weak和weak原创 2017-11-02 21:17:25 · 157 阅读 · 0 评论 -
20171103-程序员的自我修养
今天开始看第四章,静态链接。由于这本书中内容大多为编译器和链接器的内容,故大部分都无法用例子程序的方式记录。对于链接器来说,输入为目标文件a.o和b.o,输出为可执行文件ab。a,b的代码为:一般来说,有两种方式:1.按序叠加,即简单的按照次序讲不通目标文件的各个段叠加起来。这样做会让内存中存在大量零散的段(每个段必须占用单独的页,x86位4096字节即4k)2原创 2017-11-03 21:44:06 · 173 阅读 · 0 评论 -
20171104-程序员的自我修养
今天看4.2符号解析与重定位这部分是接着昨天的部分,都是静态链接中的步骤。在完成了空间地址的分配之后,链接器就进入了符号解析与重定位的步骤,也是静态链接的核心步骤。 编译完成后,静态链接完成之前,a.o的反汇编为:18行使用的为b.o中定义的shared变量;26行使用的为b.o中定义的函数swap()movl对应的机器码为c7 44 24 04,后面跟的为地址信息原创 2017-11-04 22:22:33 · 222 阅读 · 0 评论