【发布时间】:2014-05-29 14:06:33
【问题描述】:
我想从多个来源为我的项目创建一个静态 .a 库,其中一些定义了弱函数,而另一些则实现了它们。假设我有:
lib1.c:
void defaultHandler()
{
for(;;);
}
void myHandler() __attribute__((weak, alias ("defaultHandler")));
lib2.c:
void myHandler()
{
/* do my stuff here */
}
然后我想将它们放入一个单独的库中,以便最终应用程序看起来透明
$ ar -r libhandlers.a lib1.o lib2.o
但现在 libhandlers 中有 2 个符号 myHandler:
$ nm libhandlers.a | grep "myHandler"
00000001 W myHandler
00000581 T myHandler
然后在使用lib的时候,链接弱引用。我目前唯一的解决方案是不包含在库 lib2.c 中,而是将其作为源代码添加到应用程序的 Makefile 中……这并不令人满意,因为我只想提供几个库来使用而不是一大堆文件。
--whole-archive 选项也不令人满意,因为我在嵌入式系统上工作,我不想包含所有我不需要的东西。
有没有办法编译库,以便在提供强符号时弱符号消失?
注意:我使用的是 arm-none-eabi-gcc v4.8
【问题讨论】: