我想从多个来源为我的项目制作一个静态 .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
但是现在myHandler
libhandlers 中有 2 个符号:
$ nm libhandlers.a | grep "myHandler"
00000001 W myHandler
00000581 T myHandler
然后在使用lib时,链接弱引用。我目前唯一的解决方案是不包含在库中,lib2.c
而是将其作为源添加到应用程序的 Makefile 中……这并不令人满意,因为我只想提供几个库来使用而不是一大堆文件。
该--whole-archive
选项也不令人满意,因为我在嵌入式系统上工作并且我不想包含所有我不需要的东西。
有没有办法编译库,以便在提供强符号时弱符号消失?
注意:我正在使用 arm-none-eabi-gcc v4.8