Моя проблема может быть сведена к следующему:
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
Выход
$ ./a.out
foo
Таким образом, слабая полоса символов в main.c не перезаписывается сильным символом в bar.c из-за того, что bar.c связан с main.c в статической библиотеке libbar.a.
Как я могу сказать gcc сделать сильный символ в libbar.a, чтобы перезаписать слабый символ в main.c?