dbus: use -pthread instead of -lpthread
PATCH 1/1 dbus: use -pthread instead of -lpthread
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/
--- package/dbus/dbus.mk | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
package/dbus/dbus.mk +1 -1
@@ -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)
Signature · 1 line
1.7.1
PATCH 1/1 dbus: use -pthread instead of -lpthread
Hi Vicente,
Quoted 37 lines · Vicente Olivert Riera
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
(quoted diff) +0
-8-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 <[email protected]>--- package/dbus/dbus.mk | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)package/dbus/dbus.mk +0
-0
package/dbus/dbus.mk define DBUS_USERS · line 38
Quoted 5 lines
package/dbus/dbus.mk +1
-1@@ -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
Quoted 3 lines
package/dbus/dbus.mk +0
-0endif ifeq ($(BR2_microblaze),y)
Signature · 3 lines
http://baruch.siach.name/blog/ ~. .~ Tk Open Systems
=}------------------------------------------------ooO--U--Ooo------------{=
- baruch at tkos.co.il - tel: +972.2.679.5364, http://www.tkos.co.il -PATCH 1/1 dbus: use -pthread instead of -lpthread
Quoted 42 lines · Baruch Siach
Hi Vicente,
Quoted 39 lines · Vicente Olivert Riera
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
(quoted diff) +0
-8-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 <[email protected]>--- package/dbus/dbus.mk | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)package/dbus/dbus.mk +0
-0@@ -35,7 +35,7 @@ define DBUS_USERS endef
Quoted 5 lines
package/dbus/dbus.mk define DBUS_USERS · line 38
Quoted 3 lines
package/dbus/dbus.mk +1
-1ifeq ($(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.
Quoted 6 lines
baruch
Quoted 3 lines
package/dbus/dbus.mk +0
-0endif ifeq ($(BR2_microblaze),y)
Signature · 1 line
Vincent
PATCH 1/1 dbus: use -pthread instead of -lpthread
Dear Vicente Olivert Riera,
Quoted 11 lines · Vicente Olivert Riera
Quoted 5 lines
package/dbus/dbus.mk define DBUS_USERS · line 38
Quoted 3 lines
ifeq ($(BR2_PREFER_STATIC_LIB),y)package/dbus/dbus.mk +1
-1-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
Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com
PATCH 1/1 dbus: use -pthread instead of -lpthread
Hi Thomas,
Quoted 14 lines · Thomas Petazzoni
Quoted 11 lines · Vicente Olivert Riera
Quoted 5 lines
package/dbus/dbus.mk define DBUS_USERS · line 38
Quoted 3 lines
ifeq ($(BR2_PREFER_STATIC_LIB),y)package/dbus/dbus.mk +1
-1-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.
Quoted 3 lines
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
Signature · 3 lines
http://baruch.siach.name/blog/ ~. .~ Tk Open Systems
=}------------------------------------------------ooO--U--Ooo------------{=
- baruch at tkos.co.il - tel: +972.2.679.5364, http://www.tkos.co.il -