如何在Linux上创建存根共享库

How to create stub shared libraries on Linux

本文关键字:存根 共享 创建 Linux      更新时间:2023-10-16

让我们首先解释我对存根共享库的意思:一个可以用来链接的共享库(带有真实库提供的特定接口),但不包含实际代码(因此没有功能)。

除了头文件,它还提供了针对库进行开发所需的一切。

存根可以允许在没有可用代码的情况下链接到某个库,但为了兼容性,针对某个库的存根进行链接也很有用。请参见,例如在Linux中,存根用于标准库。为什么需要存根?

理想情况下,我需要的是一种从符号映射文件生成虚拟库的方法。反过来,这个映射文件是从现有的.so库中生成的,或者是在同一个构建过程中生成的。

有免费提供的工具吗?还是我需要自己滚?

我想对于简单的C库,您可以在真正的共享库上使用nm -D的输出来制作存根。例如,您可以将其管道传输到一个小的awk脚本中,该脚本定义相同名称的函数等。

另一种方法是将您的小型MELT扩展到最近的GCC编译器,该编译器将在编译真实库时生成存根(例如,以C++或C形式),或者清除每个函数体(在编译仅存根库的特殊模式中)。这适用于GCC编译的任何语言(但需要对GCC内部有一些了解,例如Trees和Gimples)。询问gcc-melt@googlegroups.com

然而,我不一定能理解这些存根的实际利益。在实践中,共享库有一些特定的编码规则和用法,在使用存根时不会验证这一点。具体地说,如果使用Xlib,您需要首先调用XOpenDisplay,最后调用XCloseDisplay,并且这样的规则不能用自动生成的存根等进行检查。