2016-02-12 58 views
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; 

回答

0

文件庫(即q_htb.o)要麼完全添加,要麼根本不添加。所以如果弱符號可以在沒有其他符號的.o文件中,它將不會被拉入

+0

請參閱編輯 – Nikhil

相關問題