У меня есть сильный символ в объектном файле и слабый символ в статической библиотеке.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;
См. Edit – Nikhil