我的问题可归纳如下:
bar.c:
#include <stdio.h>
void bar() {
printf("bar\n");
}
Run Code Online (Sandbox Code Playgroud)
main.c:
#include <stdio.h>
void __attribute__((weak)) bar() {
printf("foo\n");
}
int main() {
bar();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Makefile:
all:
gcc -c bar.c
ar -rc libbar.a bar.o
gcc main.c -L. -lbar
Run Code Online (Sandbox Code Playgroud)
输出:
$ ./a.out
foo
Run Code Online (Sandbox Code Playgroud)
所以main.c中的弱符号栏不会被bar.c中的强符号覆盖,因为bar.c被链接到静态库libbar.a中的main.c.
我如何告诉gcc在libbar.a中使用强符号来覆盖main.c中的弱符号?