【发布时间】:2016-02-12 06:37:32
【问题描述】:
我在目标文件中有一个强符号,在静态库中有一个弱符号。
如果我编译时没有将目标文件放在另一个库中,则会选择强符号。
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;
【问题讨论】:
标签: c gcc linker static-libraries