gpt4 book ai didi

c - 如何创建向后兼容的动态链接?

转载 作者:太空狗 更新时间:2023-10-29 17:03:57 28 4
gpt4 key购买 nike

似乎 glibc 2.14 引入了新版本的 memcpy(修复 bug 12518 )。然后,针对 glibc 2.14+ 编译的程序将包含指向 memcpy@GLIBC_2.14 的动态链接,这显然在旧版本的 glibc 中不可用。

但是,为了向后兼容,glibc 2.14+ 显然仍然包含旧的 memcpy@GLIBC_2.2.5 符号。我希望能够以与旧 glibc 版本二进制兼容的方式编译一些程序。在具有 glibc 2.14+ 的系统上如何编译一个程序,以便它使用这个旧的符号版本?如果该过程一定是特定于编译器的,我使用的是 GCC(但如果知道如何在其他编译器上执行此操作也很好)。

(附带说明,我必须承认对版本化符号了解不多,例如如何生成它们以及如何使用它们,或者它们是 ELF 特定的还是应该被视为标准的一部分现代 ABI;而且我还没有设法找到任何关于它的文档。关于这个主题是否有任何好的信息来源?)

最佳答案

有关共享库、符号版本控制和相关问题的规范文档是 Ulrich Drepper 的 http://www.akkadia.org/drepper/dsohowto.pdf .

要引用旧符号,您需要找到声明它的 header ,然后使用汇编指令:

extern void nftw_old (int) ;
asm (".symver nftw_old,nftw@GLIBC_2.3.3");
void main ()
{
nftw_old(0);
}

请注意,已编译可执行文件的“nm”指的是预期的先前 ABI nftw@GLIBC_2.3.3 实现。(不要尝试运行这个程序——真正的 nftw(3) 函数签名是不同的。)

关于c - 如何创建向后兼容的动态链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21420651/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com