动态库是二进制级别的复用,接口稍不留神就埋下兼容性地雷。
符号与修饰
不同编译器、不同调用约定的名字修饰不同,跨编译器边界最稳的做法是用纯 C 接口包一层。
布局稳定性
标准库类型在不同版本间布局可能变化,接口里暴露它们等于把实现细节焊死在 ABI 上。句柄加纯 C 函数是经典解法。
版本策略
语义化版本加符号版本脚本,让同一台机器上的多版本共存成为可能。
符号导出、名字修饰与结构体布局,动态库接口设计的三个坑与规避方法。
动态库是二进制级别的复用,接口稍不留神就埋下兼容性地雷。
不同编译器、不同调用约定的名字修饰不同,跨编译器边界最稳的做法是用纯 C 接口包一层。
标准库类型在不同版本间布局可能变化,接口里暴露它们等于把实现细节焊死在 ABI 上。句柄加纯 C 函数是经典解法。
语义化版本加符号版本脚本,让同一台机器上的多版本共存成为可能。