如何跨静态库传播(未使用的)符号和部分?

时间:2017-10-17 16:00:54

标签: gcc

我有一个特定于平台的库(libMyPlatform.a),它在ELF二进制文件的特定部分中暴露了各种符号(我们系统上的引导加载程序解析这些)。该库可能会被第三方开发人员静态链接到其他二进制文件。

在链接阶段,它看起来是ELF部分,libMyPlatform.a中未使用的符号不会传播到第三方二进制文件 - 可能是因为链接器在它们未被使用时丢弃它们。

如何强制libMyPlatform.a中的符号在最终生成的二进制文件中可见?

1 个答案:

答案 0 :(得分:0)

如果您可以控制用户LDFLAGS,则可以添加-Wl,--whole-archive -lyourlib Wl,--no-whole-archive

如果你不能,唯一的方法是强制引用目标文件中所有需要的符号,这些符号保证由应用程序链接(例如包含将永远使用的核心API等):

static __attribute__((used)) void *dummy[] = {
  // Contents can be auto-generated
  mysym1,
  mysym2,
  ...
};

这当然会迫使你在虚拟阵列上丢失一些从未使用过的宝贵记忆。