Переопределить слабые символы в статической библиотеке

Я хочу сделать статическую библиотеку .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

Ответы на вопрос(1)

Ваш ответ на вопрос