我有一个特定于平台的库(libMyPlatform.a),它在ELF二进制文件的特定部分中暴露了各种符号(我们系统上的引导加载程序解析这些)。该库可能会被第三方开发人员静态链接到其他二进制文件。
在链接阶段,它看起来是ELF部分,libMyPlatform.a中未使用的符号不会传播到第三方二进制文件 - 可能是因为链接器在它们未被使用时丢弃它们。
如何强制libMyPlatform.a中的符号在最终生成的二进制文件中可见?
答案 0 :(得分:0)
如果您可以控制用户LDFLAGS
,则可以添加-Wl,--whole-archive -lyourlib Wl,--no-whole-archive
。
如果你不能,唯一的方法是强制引用目标文件中所有需要的符号,这些符号保证由应用程序链接(例如包含将永远使用的核心API等):
static __attribute__((used)) void *dummy[] = {
// Contents can be auto-generated
mysym1,
mysym2,
...
};
这当然会迫使你在虚拟阵列上丢失一些从未使用过的宝贵记忆。