随笔分类 -  链接器

摘要:鉴于目前动态库在iOS App中使用越来越广泛,二进制的兼容问题可能会成为一个令人头疼的问题。本文主要对比一下C++、Java、Objecive-C和Swift的二进制兼容问题。 iOS端动态库使用情况 测试环境 C++、Java、OC和Swift分别实现Foo这个基类,然后再实现Bar这个子类,m 阅读全文
posted @ 2019-01-16 15:25 zzfx 阅读(371) 评论(0) 推荐(0) 编辑
摘要:让我们总结一下:编译器把一个cpp编译为目标文件的时候,除了要在目标文件里写入cpp里包含的数据和代码,还要至少提供3个表:未解决符号表,导出符号表和地址重定向表。 未解决符号表提供了所有在该编译单元里引用但是定义并不在本编译单元里的符号及其出现的地址。 导出符号表提供了本编译单元具有定义,并且愿意 阅读全文
posted @ 2018-01-11 18:50 zzfx 阅读(527) 评论(0) 推荐(0) 编辑
摘要:库是没有链接的编译单元的集合 1.弱符号与强符号 对C/C++而言,编译器默认函数和初始化了的全局变量为强符号。未初始化的全局变量为弱符号。此处弱符号与强符号均是针对定义来说的,不是针对符号的引用。也可以通过GCC的 “__attribute__((weak))”来定义任何一个强符号为弱符号。 [c 阅读全文
posted @ 2018-01-11 18:25 zzfx 阅读(655) 评论(0) 推荐(0) 编辑
摘要:1. 强符号和弱符号 1.1 u-boot和kernel中的__weak指令 u-boot和kernel比较普遍地使用了__weak来定义函数。 在include\linux\compiler-gcc.h中__weak是这样定义的: #define __weak __attribute__((wea 阅读全文
posted @ 2018-01-11 18:07 zzfx 阅读(1189) 评论(0) 推荐(0) 编辑
摘要:注意,强符号和弱符号都是针对定义来说的,不是针对符号的引用。 一、概述 在C语言中,函数和初始化的全局变量(包括显示初始化为0)是强符号,未初始化的全局变量是弱符号。 对于它们,下列三条规则使用: ① 同名的强符号只能有一个,否则编译器报"重复定义"错误。 ② 允许一个强符号和多个弱符号,但定义会选 阅读全文
posted @ 2018-01-11 17:59 zzfx 阅读(402) 评论(0) 推荐(0) 编辑
摘要:一、编译链接 在编写linux驱动程序时,时常会发现链接出错,当时往往不知道错误在哪。现在了解到链接器的工作原理之后,明白当时为什么出错了。对于以后有效率地编写驱动程序有很大帮助。一个C语言程序,经过诸如GCC之类的编译器编译成可执行文件一般会经历4个处理过程,这个大部分的linux入门书籍都有讲到 阅读全文
posted @ 2018-01-10 22:01 zzfx 阅读(463) 评论(0) 推荐(1) 编辑
摘要:链接器如何解析多重定义的全局符号 在编译时,编译器向会便器输出每个全局符号,汇编器把这些信息隐含地编码在可重定位目标文件的符号表内。函数和初始化的全局变量是强符号,未初始化的全局变量是弱符号。根据强弱符号的定义,unix链接器使用以下规则处理多重定义的符号:1)不允许有多个重定义符号是强符号;2)如 阅读全文
posted @ 2018-01-10 21:59 zzfx 阅读(686) 评论(0) 推荐(0) 编辑
摘要:编译器生产组件; 链接器将这些组件拼装到一起。 阅读全文
posted @ 2018-01-10 20:09 zzfx 阅读(224) 评论(0) 推荐(0) 编辑
摘要:http://www.cnblogs.com/kunhu/p/3629636.html 原文来自:http://blog.sina.com.cn/s/blog_5f8817250100i3oz.html 这里并没不是讨论大学课程中所学的《编译原理》,只是写一些我自己对C++编译器及链接器的工作原理的 阅读全文
posted @ 2017-07-07 15:55 zzfx 阅读(327) 评论(0) 推荐(0) 编辑
摘要:http://blog.chinaunix.net/uid-25714468-id-5557081.html 链接器必须对这些可重定位目标文件完成两个主要任务: 符号解析。将每个符号引用刚好和一个符号定义联系起来。 重定位。链接器把每个符号定义与一个虚拟地址联系起来,然后修改所有对这些符号的引用,使 阅读全文
posted @ 2017-05-19 17:33 zzfx 阅读(2904) 评论(0) 推荐(0) 编辑
摘要:http://blog.csdn.net/zzxian/article/details/16820035 一、概述 过程图解如下: 二、编译过程 编译过程又可以分成两个阶段:编译和汇编。 2.1编译 编译是指编译器读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码 阅读全文
posted @ 2017-05-19 00:57 zzfx 阅读(223) 评论(0) 推荐(0) 编辑
摘要:静态库是.o文件的集合。 静态库没有链接,不做符号解析和绑定。 库只是编译的产物,不是链接的。 阅读全文
posted @ 2017-05-19 00:50 zzfx 阅读(384) 评论(0) 推荐(0) 编辑