Windows 有“导入库”又名“imlibs”的概念 - 当您想将代码与动态库链接时,您不会将其链接到 .dll 本身,而是与包含调用 .dll 的 thunk 的特殊静态库链接. 好吧,这绝对是 Windows 的特质,但有时,这个想法并没有那么糟糕。
例如,假设您有一个由 100 个动态库组成的复杂系统,每个动态库平均为 2MB,然后是该系统的 10 个版本。因此,您为在所有版本中提供对此类系统的完整支持而发布的 SDK 将只有 2GB 的库来链接。使用仅包含符号和小的 thunk 的 implib,它会少得多。
implibs 的概念可以很容易地应用于普通的 Unixish 共享库 - 您只需转储符号,在 C 中从它们中创建简单的 thunk,编译,瞧,您可以链接到该库而不是原始库。
现在,我想将同样的想法扩展到 Java。所以,理想情况下,我会寻找一个可以接受 jar 的工具,然后在其中重写字节码类以删除方法体,只留下空(尽可能)体的方法定义。如果不存在这样的工具,我会寻找指向 Java 字节码转换框架的指针,这将使编写这样的工具变得容易。如果做不到这一点,我至少会寻找一种可以从 jar 中转储所有方法签名的工具,以遵循与本机共享库类似的方法(当然,这会更复杂,因为我不能只添加空 Java正文,而是需要返回有效类型的值)。