0
我在靜態庫中有一個強對象文件中的強符號和弱符號。C,靜態庫,鏈接器:如何在弱符號上給出強符號優先
如果我編譯時沒有將目標文件放在另一個庫中,則選擇強符號。
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強符號definiation,只包含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;
請參閱編輯 – Nikhil