C,链接器:如何在静态库中使用弱符号

时间:2016-02-11 11:04:34

标签: c gcc linker

我有一个很大的代码库,主要构建为二进制代码。我已经更改了Makefile来创建一个静态库,我正在创建一个链接库的二进制文件。

当我将它用作静态库时,由于弱符号未定义引用,代码无法运行。

gcc   tc.o tc_qdisc.o tc_class.o tc_filter.o tc_util.o tc_monitor.o
 m_police.o m_estimator.o m_action.o m_ematch.o emp_ematch.yacc.o 
emp_ematch.lex.o asn_tc.o asn_global.o q_fifo.o q_sfq.o q_red.o q_prio.o q_tbf.o

我解压缩了导致.o'然后使用这些目标文件的档案,我创建了一个二进制文件但是这可以如图所示工作

q_cbq.o q_rr.o q_multiq.o q_netem.o f_rsvp.o f_u32.o f_route.o f_fw.o f_basic.o f_flow.o f_cgroup.o q_dsmark.o q_gred.o f_tcindex.o q_ingress.o q_hfsc.o q_htb.o q_drr.o q_qfq.o m_gact.o m_mirred.o m_nat.o m_pedit.o m_skbedit.o p_ip.o p_icmp.o p_tcp.o p_udp.o em_nbyte.o em_cmp.o em_u32.o em_meta.o q_mqprio.o static-syms.o tc_core.o tc_red.o tc_cbq.o tc_estimator.o tc_stab.o -lresolv -L. -lnetlink -lutil -L. -lm -o tc nm tc | grep htb_qdisc_util 0000000000641bc0 D htb_qdisc_util

nm *.o | grep htb_qdisc_util
0000000000000000 D htb_qdisc_util
                 w htb_qdisc_util

只需查看目标文件符号表,​​可以看到以下内容

extern char hfsc_qdisc_util[] __attribute__((weak)); if (!strcmp(sym, "hfsc_qdisc_util")) return hfsc_qdisc_util;
extern char htb_qdisc_util[] __attribute__((weak)); if (!strcmp(sym, "htb_qdisc_util")) return htb_qdisc_util;

由于

导致的弱符号
ArrayList

如何创建静态库以及创建二进制文件时发生的事情

0 个答案:

没有答案