读书笔记|《程序员的自我修养》- 03 静态链接 发表于 2021-05-05 这是《程序员自我修养–链接、装载与库》读书笔记的第三篇,静态链接。 简单来说静态链接将多个目标文件性质相同部分,合并写入到输出目标文件中,然后将符号解析并且对外部引用符号重新定位。 目标文件的链接分为静态链接和动态链接。 静态链接是以多个重定位目标文件和命令参数作为输入,生成一个完全链接的可以加载和 ... 阅读全文 »
读书笔记|《程序员的自我修养》- 02 目标文件 发表于 2021-03-28 一、目标文件的格式目标文件是源代码编译后但为进行链接的那些中间文件(Window 的 .obj 和 Linux 下的 .o) 动态链接库(DLL, Dynamic Linking Library), Window 是 .dll, Linux 是 .so静态链接库(Static Linking Lib ... 阅读全文 »
读书笔记|《程序员的自我修养》- 01 前言 发表于 2021-03-28 图片来自极客时间深入浅出计算机原理 学习链接知识的意义 理解链接将帮助你构建大型程序构建大型程序的程序员经常会遇到由于缺少模块、缺少库或者不兼容的库版本引起的连接器错误。除非你理解连接器是如何解析引用、什么是库以及链接器是如何使用库来解析引用的,否则这类错误将令你感到迷惑或挫折。 理解链接器将帮 ... 阅读全文 »
读书笔记《修改软件的艺术》 发表于 2021-03-13 来源 《修改软件的艺术》 [TOC] 重点摘要 优秀的开发者首要考虑的是代码的可维护性 软件开发者之所以会过度开发,是因为我们害怕某个功能会以我们没有预料的方式使用 不同层次的抽象可以帮助我们对组件的关系建立起大局观,也可以让我们可以只在需要的时候关注细节 意外耦合是缺乏优质代码特质的一种体现 ... 阅读全文 »
对 Firebase 上 NDK 无符号解决的记录 发表于 2020-12-19 [toc] 记 Firebase 上无 NDK 符号表解决的过程 背景在 项目上线之后,Firebase 的后台收到音视频上报的崩溃。在项目中音视频以 so 文件的形式集成近项目。在后台上报页面,看不到符号表的匹配。 而这个 bug 占据了我们 bug 的 Top 1 位置。 解决过程第一步 重新 ... 阅读全文 »
Java 虚拟机(五)- 链接模式 发表于 2020-08-16 这是我们 Java 虚拟机系列文件的第五篇,连接模型 从程序员的角度来看,理解 Java 虚拟机体系结构最重要的方面之一就是连接模型 1.解析和动态扩展编译一个 Java 程序之后,会得到程序中每个类和接口的独立 class 文件。它们是通过接口符号(harbor)相互联系的,或者用 Java AP ... 阅读全文 »
JVM(三) 类的生命周期 发表于 2020-08-05 [TOC] Java 虚拟机通过装载、连接和初始化一个 Java 类型 类的完整生命周期包括:加载、验证、准备、解析、初始化、使用、卸载 图 1-1 类的完整生命周期 重要的阶段 装载:把二进制型式的 Java 类型读入 Java 虚拟机中 连接:把已经读入虚拟机中的二进制型式的类型数据合并到虚 ... 阅读全文 »
JVM(四)类加载器 发表于 2020-07-07 [TOC] 1.类加载器 Java 虚拟机的主要任务是装载 class 文件并且执行其中的字节码。类加载器的作用是加载程序或 Java API 的 class 文件,并将字节码加载到执行引擎。 在加载 class 文件时, 为了防止加载进来恶意的代码,需要在类的加载器体系中去实现一些规则,保证在 J ... 阅读全文 »
Java 虚拟机(二):Class 文件结构 发表于 2020-04-12 Class 文件结构Class 文件是一组以 8 位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在 Class 文件中,中间没有添加任何分隔符。 1 ClassFile 结构(从上往下顺序) 数据类型 定义 说明 u4 magic 魔数,固定是 0xCAFEBABE ... 阅读全文 »
Android 动态链接库 So 的加载 发表于 2020-03-28 [toc] 前言最近在做 Android 项目的时候,需要在 NativeActivity 中动态加载 so 。运行的时候,抛出了异常 Caused by: java.lang.IllegalArgumentException: Unable to find native library us ... 阅读全文 »