【发布时间】:2019-11-13 04:54:55
【问题描述】:
我被告知共享库相对于静态库的优势在于,如果我修改库源代码,则必须只重建共享库,而在使用静态库的情况下必须重建库和程序。
今天,我对库进行了一些更改并重建了 *.so 文件。但是,程序加载新的共享库并崩溃,我必须使用新的共享库重建程序才能使其工作。所以我的问题是:
1) 程序如何加载共享库?为什么我必须重新构建程序?
2) 其他依赖于修改库的库怎么样,我也必须重建它们吗?
【问题讨论】:
我被告知共享库相对于静态库的优势在于,如果我修改库源代码,则必须只重建共享库,而在使用静态库的情况下必须重建库和程序。
今天,我对库进行了一些更改并重建了 *.so 文件。但是,程序加载新的共享库并崩溃,我必须使用新的共享库重建程序才能使其工作。所以我的问题是:
1) 程序如何加载共享库?为什么我必须重新构建程序?
2) 其他依赖于修改库的库怎么样,我也必须重建它们吗?
【问题讨论】:
在旧程序中使用新的共享库时,对于共享库可以进行哪些更改以避免破坏 ABI 兼容性,有一些规则。例如,它可以添加新函数和更改现有函数的主体,但不能删除函数或更改现有函数的签名。当其他人创建共享库时,他们会通过版本控制为您跟踪这些内容。如果您要自己制作,则需要自己跟踪。
【讨论】: