在检查libgcc为交叉编译环境做准备时,我注意到有一些libgcc-s[124]-{arch}包-有很多s1包,但只有很少的s2和s4包(m68 k正好有1个,hppa正好有1个)。这些是什么意思?它们是如何分配的?有没有关于它的维基?
libgcc
libgcc-s[124]-{arch}
s1
s2
s4
chy5wohz1#
非常不幸的是,没有wiki或任何类型的网络资源。唯一可以找到关于它的信息的地方是gcc-ver-base包中的“changelog”文件。信息也非常分散,很难找到。但我设法总结:libgcc库实现了GCC编译器所期望的但目标平台所缺少的一些功能。这些功能中包括一组“异常处理”例程。这些EH例程与其他计算整数和浮点例程不同,它们依赖于目标平台的ABI。由于Debian中的异常处理在版本和平台之间会有变化,因此必须通过使用版本屏障来维护兼容性-也就是说,使用版本控制来防止可执行二进制文件与不兼容的动态库链接。这个版本被称为“soversion”(更改日志术语),它代表共享对象版本,其中共享对象是Unix/Linux动态库的术语。m68 k的版本被撞过一次,所以是2; hppa的情况比较复杂,我不能确定它的soverversion-3,但碰巧它曾经从soverversion-6恢复到soverversion-4。显然,Debian认为从功能正确性的Angular 来看,对如此重要的库在包名中进行显式版本控制是有益的。
1条答案
按热度按时间chy5wohz1#
非常不幸的是,没有wiki或任何类型的网络资源。唯一可以找到关于它的信息的地方是gcc-ver-base包中的“changelog”文件。
信息也非常分散,很难找到。但我设法总结:
libgcc库实现了GCC编译器所期望的但目标平台所缺少的一些功能。这些功能中包括一组“异常处理”例程。这些EH例程与其他计算整数和浮点例程不同,它们依赖于目标平台的ABI。
由于Debian中的异常处理在版本和平台之间会有变化,因此必须通过使用版本屏障来维护兼容性-也就是说,使用版本控制来防止可执行二进制文件与不兼容的动态库链接。
这个版本被称为“soversion”(更改日志术语),它代表共享对象版本,其中共享对象是Unix/Linux动态库的术语。
m68 k的版本被撞过一次,所以是2; hppa的情况比较复杂,我不能确定它的soverversion-3,但碰巧它曾经从soverversion-6恢复到soverversion-4。
显然,Debian认为从功能正确性的Angular 来看,对如此重要的库在包名中进行显式版本控制是有益的。