Message ID | 1404145692-47530-1-git-send-email-Vincent.Riera@imgtec.com |
---|---|
State | Accepted |
Commit | 717236da0f88d78858ff4dcf225fbd3db58f01e6 |
Headers | show |
Hi Vicente, On Mon, Jun 30, 2014 at 05:28:12PM +0100, Vicente Olivert Riera wrote: > This fixes a problem in other packages when they link against dbus. For > instance, with the dnsmasq package: > > /buildroot/output/host/usr/bin/mipsel-ctng-linux-uclibc-gcc --static > -lidn -o dnsmasq cache.o rfc1035.o util.o option.o forward.o network.o > dnsmasq.o dhcp.o lease.o rfc2131.o netlink.o dbus.o bpf.o helper.o > tftp.o log.o conntrack.o dhcp6.o rfc3315.o dhcp-common.o outpacket.o > radv.o slaac.o auth.o ipset.o domain.o dnssec.o blockdata.o > -L/buildroot/output/host/usr/mipsel-buildroot-linux-uclibc/sysroot/usr/lib > -ldbus-1 -lpthread > -L/buildroot/output/host/usr/mipsel-buildroot-linux-uclibc/sysroot/usr/lib > -lidn -liconv > -L/buildroot/output/host/usr/mipsel-buildroot-linux-uclibc/sysroot/usr/lib > -llua -lm -Wl,-Bstatic -lhogweed > -L/buildroot/output/host/usr/mipsel-buildroot-linux-uclibc/sysroot/usr/lib > -lnettle -lgmp -Wl,-Bdynamic -Wl,-Bstatic -lgmp -Wl,-Bdynamic > /buildroot/output/host/usr/mipsel-buildroot-linux-uclibc/sysroot/usr/lib/libpthread.a(init.os): > In function `__pthread_initialize_minimal_internal': > init.c:(.text+0x26c): undefined reference to `__libc_setup_tls' > collect2: error: ld returned 1 exit status > make[2]: *** [dnsmasq] Error 1 > make[2]: Leaving directory > `/buildroot/output/build/dnsmasq-2.71/src' > > Fixes: > http://autobuild.buildroot.net/results/7cd/7cdab3b6f74dbfde965300a51e58a377ba30602b/ > > Signed-off-by: Vicente Olivert Riera <Vincent.Riera@imgtec.com> > --- > package/dbus/dbus.mk | 2 +- > 1 files changed, 1 insertions(+), 1 deletions(-) > > diff --git a/package/dbus/dbus.mk b/package/dbus/dbus.mk > index fc446b1..0c8fcf3 100644 > --- a/package/dbus/dbus.mk > +++ b/package/dbus/dbus.mk > @@ -35,7 +35,7 @@ define DBUS_USERS > endef > > ifeq ($(BR2_PREFER_STATIC_LIB),y) > -DBUS_CONF_OPT += LIBS='-lpthread' > +DBUS_CONF_OPT += LIBS='-pthread' Can you explain how this change solves the build failure? baruch > endif > > ifeq ($(BR2_microblaze),y)
On 06/30/2014 05:49 PM, Baruch Siach wrote: > Hi Vicente, > > On Mon, Jun 30, 2014 at 05:28:12PM +0100, Vicente Olivert Riera wrote: >> This fixes a problem in other packages when they link against dbus. For >> instance, with the dnsmasq package: >> >> /buildroot/output/host/usr/bin/mipsel-ctng-linux-uclibc-gcc --static >> -lidn -o dnsmasq cache.o rfc1035.o util.o option.o forward.o network.o >> dnsmasq.o dhcp.o lease.o rfc2131.o netlink.o dbus.o bpf.o helper.o >> tftp.o log.o conntrack.o dhcp6.o rfc3315.o dhcp-common.o outpacket.o >> radv.o slaac.o auth.o ipset.o domain.o dnssec.o blockdata.o >> -L/buildroot/output/host/usr/mipsel-buildroot-linux-uclibc/sysroot/usr/lib >> -ldbus-1 -lpthread >> -L/buildroot/output/host/usr/mipsel-buildroot-linux-uclibc/sysroot/usr/lib >> -lidn -liconv >> -L/buildroot/output/host/usr/mipsel-buildroot-linux-uclibc/sysroot/usr/lib >> -llua -lm -Wl,-Bstatic -lhogweed >> -L/buildroot/output/host/usr/mipsel-buildroot-linux-uclibc/sysroot/usr/lib >> -lnettle -lgmp -Wl,-Bdynamic -Wl,-Bstatic -lgmp -Wl,-Bdynamic >> /buildroot/output/host/usr/mipsel-buildroot-linux-uclibc/sysroot/usr/lib/libpthread.a(init.os): >> In function `__pthread_initialize_minimal_internal': >> init.c:(.text+0x26c): undefined reference to `__libc_setup_tls' >> collect2: error: ld returned 1 exit status >> make[2]: *** [dnsmasq] Error 1 >> make[2]: Leaving directory >> `/buildroot/output/build/dnsmasq-2.71/src' >> >> Fixes: >> http://autobuild.buildroot.net/results/7cd/7cdab3b6f74dbfde965300a51e58a377ba30602b/ >> >> Signed-off-by: Vicente Olivert Riera <Vincent.Riera@imgtec.com> >> --- >> package/dbus/dbus.mk | 2 +- >> 1 files changed, 1 insertions(+), 1 deletions(-) >> >> diff --git a/package/dbus/dbus.mk b/package/dbus/dbus.mk >> index fc446b1..0c8fcf3 100644 >> --- a/package/dbus/dbus.mk >> +++ b/package/dbus/dbus.mk >> @@ -35,7 +35,7 @@ define DBUS_USERS >> endef >> >> ifeq ($(BR2_PREFER_STATIC_LIB),y) >> -DBUS_CONF_OPT += LIBS='-lpthread' >> +DBUS_CONF_OPT += LIBS='-pthread' > > Can you explain how this change solves the build failure? Yes. When dnsmasq tries to link against dbus it checks the dbus pkgconfig file to obtain the LIBS that it need to pass to the linker. In the dbus .pc file you have "-ldbus-1 -lpthread" because you used -lpthread when building dbus. If you use -pthread when you build dbus, then you will have -pthread in the dbus .pc file as well. > baruch > >> endif >> >> ifeq ($(BR2_microblaze),y) >
Dear Vicente Olivert Riera, On Mon, 30 Jun 2014 17:54:27 +0100, Vicente Olivert Riera wrote: > >> ifeq ($(BR2_PREFER_STATIC_LIB),y) > >> -DBUS_CONF_OPT += LIBS='-lpthread' > >> +DBUS_CONF_OPT += LIBS='-pthread' > > > > Can you explain how this change solves the build failure? > > Yes. When dnsmasq tries to link against dbus it checks the dbus > pkgconfig file to obtain the LIBS that it need to pass to the linker. In > the dbus .pc file you have "-ldbus-1 -lpthread" because you used > -lpthread when building dbus. If you use -pthread when you build dbus, > then you will have -pthread in the dbus .pc file as well. I think it'd be good to have an updated version of the patch that gives this explanation + an explanation of the difference between -pthread and -lpthread and how this difference solves the problem. Also, would it be possible to get this bug fixed in upstream DBus? Thanks, Thomas
Hi Thomas, On Mon, Jun 30, 2014 at 08:06:16PM +0200, Thomas Petazzoni wrote: > On Mon, 30 Jun 2014 17:54:27 +0100, Vicente Olivert Riera wrote: > > > >> ifeq ($(BR2_PREFER_STATIC_LIB),y) > > >> -DBUS_CONF_OPT += LIBS='-lpthread' > > >> +DBUS_CONF_OPT += LIBS='-pthread' > > > > > > Can you explain how this change solves the build failure? > > > > Yes. When dnsmasq tries to link against dbus it checks the dbus > > pkgconfig file to obtain the LIBS that it need to pass to the linker. In > > the dbus .pc file you have "-ldbus-1 -lpthread" because you used > > -lpthread when building dbus. If you use -pthread when you build dbus, > > then you will have -pthread in the dbus .pc file as well. > > I think it'd be good to have an updated version of the patch that gives > this explanation + an explanation of the difference between -pthread > and -lpthread and how this difference solves the problem. Getting a definite answer on this (-lpthread vs -pthread) is not easy, it seems. According to http://stackoverflow.com/questions/23250863/difference-between-pthread-and-lpthread-while-compiling -pthread also defines _REENTRANT and __USE_REENTRANT. I guess that this is related to initialization of thread local storage (TLS) at glibc. baruch
diff --git a/package/dbus/dbus.mk b/package/dbus/dbus.mk index fc446b1..0c8fcf3 100644 --- a/package/dbus/dbus.mk +++ b/package/dbus/dbus.mk @@ -35,7 +35,7 @@ define DBUS_USERS endef ifeq ($(BR2_PREFER_STATIC_LIB),y) -DBUS_CONF_OPT += LIBS='-lpthread' +DBUS_CONF_OPT += LIBS='-pthread' endif ifeq ($(BR2_microblaze),y)
This fixes a problem in other packages when they link against dbus. For instance, with the dnsmasq package: /buildroot/output/host/usr/bin/mipsel-ctng-linux-uclibc-gcc --static -lidn -o dnsmasq cache.o rfc1035.o util.o option.o forward.o network.o dnsmasq.o dhcp.o lease.o rfc2131.o netlink.o dbus.o bpf.o helper.o tftp.o log.o conntrack.o dhcp6.o rfc3315.o dhcp-common.o outpacket.o radv.o slaac.o auth.o ipset.o domain.o dnssec.o blockdata.o -L/buildroot/output/host/usr/mipsel-buildroot-linux-uclibc/sysroot/usr/lib -ldbus-1 -lpthread -L/buildroot/output/host/usr/mipsel-buildroot-linux-uclibc/sysroot/usr/lib -lidn -liconv -L/buildroot/output/host/usr/mipsel-buildroot-linux-uclibc/sysroot/usr/lib -llua -lm -Wl,-Bstatic -lhogweed -L/buildroot/output/host/usr/mipsel-buildroot-linux-uclibc/sysroot/usr/lib -lnettle -lgmp -Wl,-Bdynamic -Wl,-Bstatic -lgmp -Wl,-Bdynamic /buildroot/output/host/usr/mipsel-buildroot-linux-uclibc/sysroot/usr/lib/libpthread.a(init.os): In function `__pthread_initialize_minimal_internal': init.c:(.text+0x26c): undefined reference to `__libc_setup_tls' collect2: error: ld returned 1 exit status make[2]: *** [dnsmasq] Error 1 make[2]: Leaving directory `/buildroot/output/build/dnsmasq-2.71/src' Fixes: http://autobuild.buildroot.net/results/7cd/7cdab3b6f74dbfde965300a51e58a377ba30602b/ Signed-off-by: Vicente Olivert Riera <Vincent.Riera@imgtec.com> --- package/dbus/dbus.mk | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)