Comment faire de la gcc lien très fort avec le symbole dans la bibliothèque statique pour écraser les faibles symbole?

Mon problème peut se résumer dans les points suivants:

bar.c:

#include <stdio.h>

void bar() {
    printf("bar\n");
}

principal.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

Sortie:

$ ./a.out
foo

De sorte que le symbole de la faiblesse de la barre principale.c n'est pas remplacé par le symbole fort dans la barre.c en raison de la barre.c étant lié à main.c dans une bibliothèque statique libbar.un.

Comment puis-je demander à gcc de faire le symbole fort dans libbar.un écrasé à la faiblesse du symbole principal.c?

OriginalL'auteur user1777342 | 2012-10-26