2016-02-12 3 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 в статической библиотеке. Как сделать сильным символом?

Примечание: Изменение порядка библиотеки не помогло.

РЕДАКТИРОВАТЬ:

Сильный definiation символ 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; 

ответ

0

файлов в библиотеках (т.е. q_htb.o) либо полностью добавлены, либо вообще отсутствуют. Поэтому, если слабый символ может быть в файле .o без каких-либо других символов, он не будет втянут в

+0

См. Edit – Nikhil

Смежные вопросы