2017-10-17 54 views
0

我有一个特定于平台的库(libMyPlatform.a),它具有在ELF二进制文件的特定部分公开的各种符号(我们系统上的引导装载程序解析这些库)。该库可能由第三方开发人员静态链接到其他二进制文件。如何在静态库中传播(未使用的)符号和节?

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

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

+0

相关? https://stackoverflow.com/q/29545191/1531971 – jdv

+0

@jdv种类 - 但我的问题更多的是一般情况。 https://stackoverflow.com/a/29545417/8791029很好,如果我编译到一个可执行文件。但是,如果我将它编译到一个库中,然后将其链接到一个可执行文件,它将不起作用,即该符号将在库中,但不在二进制文件中。我希望它也能出现在二进制文件中。 –

回答

0

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

如果不能,唯一的办法就是力量引用这是保证由应用程序链接在目标文件所有需要的符号(例如包含核心API将始终使用等):

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

这当然会迫使你放弃一些从未使用的虚拟阵列上的珍贵内存。

相关问题