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

时间:2014-09-03 11:50:29

标签: c++ c linux binutils

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

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

Stubs可以允许链接到某个库而无需提供代码,但是为了兼容性,它可以用于链接某个库的存根。请参阅示例In Linux stubs are used for standard libraries. Why are stubs required?

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

有免费提供的工具吗?或者我需要自己滚动?

1 个答案:

答案 0 :(得分:3)

我想对于简单的C库,您可以使用真实共享库上的nm -D输出来创建存根。例如,您可以将其管道化为一个小awk脚本,该脚本定义同名函数等。

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

上询问

但是,我不确定这些存根的实际利益。在实践中,共享库具有一些特定的编码规则和用法,并且在使用存根时不会验证。具体来说,如果使用Xlib,您需要先调用XOpenDisplay,最后调用XCloseDisplay,并且不能使用自动生成的存根等检查此规则...

相关问题