Date: Sun, 6 Apr 2014 17:12:17 +0100 From: David Chisnall <theraven@FreeBSD.org> To: sbruno@freebsd.org Cc: "freebsd-current@freebsd.org" <freebsd-current@freebsd.org> Subject: Re: static linking, libc multiple definitions Message-ID: <0650344F-FF86-4675-8724-0018AA00740B@FreeBSD.org> In-Reply-To: <1396799725.37365.4.camel@powernoodle.corp.yahoo.com> References: <1396799725.37365.4.camel@powernoodle.corp.yahoo.com>
next in thread | previous in thread | raw e-mail | index | archive | help
It looks like these two are defined in rpc_com.h, so they are declared and defined in multiple compilation units. That's not actually wrong (they'll have common linkage and be merged), but it's discouraged because it can mask other errors. Can you see if this patch fixes it for you?
David
Index: rpc/rpc_com.h
===================================================================
--- rpc/rpc_com.h (revision 264068)
+++ rpc/rpc_com.h (working copy)
@@ -86,8 +86,8 @@
bool_t __xdrrec_getrec(XDR *, enum xprt_stat *, bool_t);
void __xprt_unregister_unlocked(SVCXPRT *);
-SVCXPRT **__svc_xports;
-int __svc_maxrec;
+extern SVCXPRT **__svc_xports;
+extern int __svc_maxrec;
__END_DECLS
Index: rpc/svc.c
===================================================================
--- rpc/svc.c (revision 264068)
+++ rpc/svc.c (working copy)
@@ -84,6 +84,9 @@
void (*sc_dispatch)(struct svc_req *, SVCXPRT *);
} *svc_head;
+SVCXPRT **__svc_xports;
+int __svc_maxrec;
+
static struct svc_callout *svc_find(rpcprog_t, rpcvers_t,
struct svc_callout **, char *);
static void __xprt_do_unregister (SVCXPRT *xprt, bool_t dolock);
On 6 Apr 2014, at 16:55, Sean Bruno <sbruno@ignoranthack.me> wrote:
> Doing static linking of qemu bsd user applications and I seem to get a
> lot of warnings about multiple symbols in libc. What's going on here?
>
>
> /usr/lib/libc.a(svc_simple.o): warning: multiple common of
> `__svc_maxrec'
> /usr/lib/libc.a(rpc_soc.o): warning: previous common is here
> /usr/lib/libc.a(svc_simple.o): warning: multiple common of
> `__svc_xports'
> /usr/lib/libc.a(rpc_soc.o): warning: previous common is here
> /usr/lib/libc.a(svc_generic.o): warning: multiple common of
> `__svc_maxrec'
> /usr/lib/libc.a(rpc_soc.o): warning: previous common is here
> /usr/lib/libc.a(svc_generic.o): warning: multiple common of
> `__svc_xports'
> /usr/lib/libc.a(rpc_soc.o): warning: previous common is here
> /usr/lib/libc.a(svc_dg.o): warning: multiple common of `__svc_maxrec'
> /usr/lib/libc.a(rpc_soc.o): warning: previous common is here
> /usr/lib/libc.a(svc_dg.o): warning: multiple common of `__svc_xports'
> /usr/lib/libc.a(rpc_soc.o): warning: previous common is here
> /usr/lib/libc.a(clnt_bcast.o): warning: multiple common of
> `__svc_maxrec'
> /usr/lib/libc.a(rpc_soc.o): warning: previous common is here
> /usr/lib/libc.a(clnt_bcast.o): warning: multiple common of
> `__svc_xports'
> /usr/lib/libc.a(rpc_soc.o): warning: previous common is here
> /usr/lib/libc.a(svc_vc.o): warning: multiple common of `__svc_maxrec'
> /usr/lib/libc.a(rpc_soc.o): warning: previous common is here
> /usr/lib/libc.a(svc_vc.o): warning: multiple common of `__svc_xports'
> /usr/lib/libc.a(rpc_soc.o): warning: previous common is here
> /usr/lib/libc.a(svc.o): warning: multiple common of `__svc_maxrec'
> /usr/lib/libc.a(rpc_soc.o): warning: previous common is here
> /usr/lib/libc.a(svc.o): warning: multiple common of `__svc_xports'
> /usr/lib/libc.a(rpc_soc.o): warning: previous common is here
> /usr/lib/libc.a(pmap_clnt.o): warning: multiple common of `__svc_maxrec'
> /usr/lib/libc.a(rpc_soc.o): warning: previous common is here
> /usr/lib/libc.a(pmap_clnt.o): warning: multiple common of `__svc_xports'
> /usr/lib/libc.a(rpc_soc.o): warning: previous common is here
> /usr/lib/libc.a(clnt_generic.o): warning: multiple common of
> `__svc_maxrec'
> /usr/lib/libc.a(rpc_soc.o): warning: previous common is here
> /usr/lib/libc.a(clnt_generic.o): warning: multiple common of
> `__svc_xports'
> /usr/lib/libc.a(rpc_soc.o): warning: previous common is here
> /usr/lib/libc.a(clnt_dg.o): warning: multiple common of `__svc_maxrec'
> /usr/lib/libc.a(rpc_soc.o): warning: previous common is here
> /usr/lib/libc.a(clnt_dg.o): warning: multiple common of `__svc_xports'
> /usr/lib/libc.a(rpc_soc.o): warning: previous common is here
> /usr/lib/libc.a(clnt_vc.o): warning: multiple common of `__svc_maxrec'
> /usr/lib/libc.a(rpc_soc.o): warning: previous common is here
> /usr/lib/libc.a(clnt_vc.o): warning: multiple common of `__svc_xports'
> /usr/lib/libc.a(rpc_soc.o): warning: previous common is here
> /usr/lib/libc.a(xdr_rec.o): warning: multiple common of `__svc_maxrec'
> /usr/lib/libc.a(rpc_soc.o): warning: previous common is here
> /usr/lib/libc.a(xdr_rec.o): warning: multiple common of `__svc_xports'
> /usr/lib/libc.a(rpc_soc.o): warning: previous common is here
> /usr/lib/libc.a(rpc_generic.o): warning: multiple common of
> `__svc_maxrec'
> /usr/lib/libc.a(rpc_soc.o): warning: previous common is here
> /usr/lib/libc.a(rpc_generic.o): warning: multiple common of
> `__svc_xports'
> /usr/lib/libc.a(rpc_soc.o): warning: previous common is here
> /usr/lib/libc.a(getnetconfig.o): warning: multiple common of
> `__svc_maxrec'
> /usr/lib/libc.a(rpc_soc.o): warning: previous common is here
> /usr/lib/libc.a(getnetconfig.o): warning: multiple common of
> `__svc_xports'
> /usr/lib/libc.a(rpc_soc.o): warning: previous common is here
> /usr/lib/libc.a(rpcb_clnt.o): warning: multiple common of `__svc_maxrec'
> /usr/lib/libc.a(rpc_soc.o): warning: previous common is here
> /usr/lib/libc.a(rpcb_clnt.o): warning: multiple common of `__svc_xports'
> /usr/lib/libc.a(rpc_soc.o): warning: previous common is here
>
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?0650344F-FF86-4675-8724-0018AA00740B>
