小编use*_*342的帖子

如何在静态库中使用gcc链接强符号来覆盖弱符号?

我的问题可归纳如下:

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中的弱符号?

c gcc ld weak-linking

23
推荐指数
2
解决办法
1万
查看次数

标签 统计

c ×1

gcc ×1

ld ×1

weak-linking ×1