gpt4 book ai didi

C,静态库,链接器: How to give preference to strong symbol over weak symbol

转载 作者:行者123 更新时间:2023-11-30 17:05:21 31 4
gpt4 key购买 nike

我在目标文件中有一个强符号,在静态库中有一个弱符号。

如果我编译时没有将目标文件放入另一个库中,则会选择强符号。

gcc q_htb.o -lresolv -L. -lasntc -lnetlink -lutil -L. -lm -o tc

这里 q_htb.o 包含强符号 htb_qdisc_uti ,libasntc 库包含弱符号。

 nm tc | grep htb_qdisc_util
0000000000615960 D htb_qdisc_util

现在,如果我将 q_htb.o 目标文件放入静态库 libhtb 中,则优先考虑弱符号

gcc -lresolv -L. -lasntc -lhtb -lnetlink -lutil -L. -lm -o tc
nm tc | grep htb_qdisc_util
w htb_qdisc_util

如上所示,htb_qdisc_util 很弱。我需要在静态库中包含 q_htb.o,如何选择强符号?

注意:更改库的顺序没有帮助。

编辑:

q_htb.o 中的强符号定义,仅包含 q_htb.c

struct qdisc_util htb_qdisc_util = {
.id = "htb",
.parse_qopt = htb_parse_opt,
.print_qopt = htb_print_opt,
.print_xstats = htb_print_xstats,
.parse_copt = htb_parse_class_opt,
.print_copt = htb_print_opt,
};

libasntc.a 中的弱符号

 extern char htb_qdisc_util[] __attribute__((weak)); if (!strcmp(sym, "htb_qdisc_util")) return htb_qdisc_util;

最佳答案

库中的文件(即q_htb.o)要么完全添加,要么根本不添加。因此,如果弱符号可以位于没有其他符号的 .o 文件中,则不会将其拉入

关于C,静态库,链接器: How to give preference to strong symbol over weak symbol,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35356299/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com