Skip to contentSkip to conversation

dbus: use -pthread instead of -lpthread

PATCH New Vicente Olivert Riera 3 participants 5 messages Jun 30, 2014

lore
Share & tools
lore
#0 lore raw

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
index fc446b1..0c8fcf3 100644
@@ -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
#1 lore raw

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/

---
 package/dbus/dbus.mk |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
package/dbus/dbus.mk +0 -0
index fc446b1..0c8fcf3 100644

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 -0
 endif
 
 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 -
#2 lore raw

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/
---
  package/dbus/dbus.mk |    2 +-
  1 files changed, 1 insertions(+), 1 deletions(-)
package/dbus/dbus.mk +0 -0
index fc446b1..0c8fcf3 100644
@@ -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 -1
  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.

Quoted 6 lines

baruch

Quoted 3 lines
package/dbus/dbus.mk +0 -0
  endif
 
  ifeq ($(BR2_microblaze),y)
Signature · 1 line
Vincent
#3 lore raw

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
#4 lore raw

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 -