次要版本检查ELF共享库

时间:2013-04-09 00:40:07

标签: c shared-libraries versioning elf

简短版本:如何使用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();
}

或者有更好的解决方案吗?

0 个答案:

没有答案