01
库的基石:静态库与动态库本质
从编译链接的视角看库的诞生,理解本质区别
概念编译
02
静态库实战:ar & gcc
使用ar和gcc创建静态库,掌握静态链接完整流程
实战ar
03
动态库实战:gcc -shared
创建动态库,理解位置无关代码(PIC)的重要性
PIC共享
04
库的命名与搜索
Linux/Windows命名规则,gcc/g++搜索路径详解
路径命名
05
运行时加载:dlopen/dlsym
使用dlopen/dlsym/dlerror/dlclose实现运行时加载
动态dlopen
06
符号解析与重定位
深入理解链接器如何解析符号,静态与动态重定位区别
链接重定位
07
符号可见性控制
控制符号导出与隐藏,__attribute__((visibility))实战
可见性隐藏
08
库的依赖与顺序
解决链接时依赖顺序,避免未定义符号错误
依赖顺序
09
库的版本管理
soname机制,符号版本控制,兼容性管理
soname版本
10
动态库搜索路径
LD_LIBRARY_PATH、rpath、runpath优先级与区别
路径rpath
11
静态库与动态库混用
混合链接的陷阱,如何避免符号冲突
混合冲突
12
跨平台库开发
Windows DLL与Linux .so差异,条件编译实战
跨平台DLL
13
库的调试与诊断
使用nm、objdump、readelf、ldd分析库文件
调试nm
14
动态库初始化与清理
__attribute__((constructor))和destructor
构造析构
15
线程安全与库
多线程环境下动态库加载与卸载注意事项
线程安全
16
库的封装与接口设计
设计稳定ABI接口,Pimpl惯用法
ABIPimpl
17
C与C++混合库
extern "C"使用,名字改编(name mangling)问题
混合extern
18
库的测试策略
单元测试、集成测试、回归测试在库开发中的应用
测试CI
19
库的文档与发布
API文档生成,版本号管理,发布流程
文档发布
20
性能优化:加载与延迟绑定
减少动态库加载时间,Lazy Binding技术
优化延迟
21
内存管理
库内部内存分配与释放,避免跨模块内存操作
内存跨模块
22
异常安全
C++异常在跨库边界传播时的注意事项
异常C++
23
全局变量问题
库中全局变量的初始化顺序与可见性控制
全局初始化
24
插件系统设计
基于动态库的插件架构,插件发现与加载机制
插件架构
25
安全考量
防止DLL劫持,符号注入攻击的防御
安全劫持
26
容器化部署
Docker中动态库管理,多阶段构建优化
Docker部署
27
构建系统集成
CMake中库的创建与使用,find_package机制
CMake构建
28
持续集成CI/CD
CI/CD流水线中库的构建、测试与发布自动化
CI/CD自动化
29
开源库实践分析
分析libcurl、openssl等知名开源库的库设计
开源分析
30
综合项目实战
从零构建完整库项目:静态库、动态库、测试、文档
实战全栈