Dol*_*000 8 c glibc libc elf binary-compatibility
似乎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 \xe2\x80\x8e 。
\n\n要引用旧符号,您需要找到声明它的标头,然后使用汇编器指令:
\n\nextern void nftw_old (int) ;\nasm (".symver nftw_old,nftw@GLIBC_2.3.3");\nvoid main ()\n{\n nftw_old(0);\n}\nRun Code Online (Sandbox Code Playgroud)\n\n请注意,已编译可执行文件的“nm”指的是预期的先前 ABI nftw@GLIBC_2.3.3 实现。\n(不要尝试运行此程序 - 真正的 nftw(3) 函数签名是不同的。)
\n