简短版本:如何使用ELF共享库模拟Mach-O的兼容版本功能?
长版本:我想用" major.minor.patchlevel"创建ELF共享库。版本。只应为与
链接的可执行文件加载共享库否则动态链接器应该抛出错误而不运行可执行文件。
我知道我可以使用链接器版本脚本,但是为库中的每个符号指定版本似乎很乏味且容易出错。我的一个想法是使用只有一个符号的版本脚本,每个库的用户都必须使用它,例如初始化函数。因此,如果该函数被称为lib_init
,我会为我的库的1.2.x版编写如下版本脚本:
VERS_1.0 {
};
VERS_1.1 {
} VERS_1.0;
VERS_1.2 {
global: lib_init;
} VERS_1.1;
这会产生预期效果吗?
另一个想法是在lib_init
中进行明确的版本检查,例如:
void lib_init(int minor_version) {
if (minor_version > 2) abort();
}
或者有更好的解决方案吗?