如何在Linux上创建存根共享库
How to create stub shared libraries on Linux
让我们首先解释我对存根共享库的意思:一个可以用来链接的共享库(带有真实库提供的特定接口),但不包含实际代码(因此没有功能)。
除了头文件,它还提供了针对库进行开发所需的一切。
存根可以允许在没有可用代码的情况下链接到某个库,但为了兼容性,针对某个库的存根进行链接也很有用。请参见,例如在Linux中,存根用于标准库。为什么需要存根?
理想情况下,我需要的是一种从符号映射文件生成虚拟库的方法。反过来,这个映射文件是从现有的.so库中生成的,或者是在同一个构建过程中生成的。
有免费提供的工具吗?还是我需要自己滚?
我想对于简单的C库,您可以在真正的共享库上使用nm -D
的输出来制作存根。例如,您可以将其管道传输到一个小的awk
脚本中,该脚本定义相同名称的函数等。
另一种方法是将您的小型MELT扩展到最近的GCC编译器,该编译器将在编译真实库时生成存根(例如,以C++或C形式),或者清除每个函数体(在编译仅存根库的特殊模式中)。这适用于GCC编译的任何语言(但需要对GCC内部有一些了解,例如Trees和Gimples)。询问gcc-melt@googlegroups.com
然而,我不一定能理解这些存根的实际利益。在实践中,共享库有一些特定的编码规则和用法,在使用存根时不会验证这一点。具体地说,如果使用Xlib,您需要首先调用XOpenDisplay
,最后调用XCloseDisplay
,并且这样的规则不能用自动生成的存根等进行检查。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 在cuda线程之间共享大量常量数据
- 如何从具有移动语义的类对象中生成共享指针
- 在c代码之间共享数据的最佳方式
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 将静态库链接到不带-fPIC的共享库中
- 为什么std::互斥需要很长的、非常不规则的时间来共享
- 使用Boost Interprocess创建托管共享内存需要很长时间
- 无法在Ubuntu上将共享库与Eclipse链接
- 从python调用openMP共享库时,未定义opnMP函数
- 在为LINUX创建共享库时,如何避免STL的私有/弱副本
- 为什么我的共享库中存在展开符号
- 使用共享指针的函数调用,其对象应为 const
- 具有两个独占锁组的共享锁
- 共享队列的线程安全
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 我应该共享gRPC存根还是通道
- 如何在Linux上创建存根共享库
- c++中存根函数的使用方式被共享库函数所取代