Como fazer o gcc ligar um símbolo forte na biblioteca estática para sobrescrever o símbolo fraco?
Meu problema pode ser resumido no seguinte:
bar.c:
#include <stdio.h>
void bar() {
printf("bar\n");
}
main.c:
#include <stdio.h>
void __attribute__((weak)) bar() {
printf("foo\n");
}
int main() {
bar();
return 0;
}
Makefile:
all:
gcc -c bar.c
ar -rc libbar.a bar.o
gcc main.c -L. -lbar
Saída:
$ ./a.out
foo
Portanto, a barra de símbolo fraco em main.c não é sobrescrita pelo símbolo forte em bar.c devido a bar.c estar ligada a main.c em uma biblioteca estática libbar.a.
Como posso dizer ao gcc para fazer o símbolo forte em libbar.a para sobrescrever o símbolo fraco em main.c?