Переопределить слабые символы в статической библиотеке
Я хочу сделать статическую библиотеку .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
Но теперь есть 2 символаmyHandler
в libhandlers:
$ nm libhandlers.a | grep "myHandler"
00000001 W myHandler
00000581 T myHandler
И затем при использовании lib, слабая ссылка связана. Единственное решение, которое у меня есть на данный момент, это не включать в библиотеку.lib2.c
но добавлять его в качестве исходного кода в Makefile приложения ... это не устраивает, так как я хотел бы предоставить только несколько библиотек для использования, а не целую кучу файлов.
--whole-archive
Опция также не устраивает, так как я работаю на встроенной системе и не хочу включать все вещи, которые мне не нужны.
Есть ли способ скомпилировать библиотеку, чтобы слабый символ исчезал, если был указан сильный?
ПРИМЕЧАНИЕ: я использую arm-none-eabi-gcc v4.8