[Xcb] x11 static compile fail

Uli Schlachter psychon at znc.in
Fri Jun 10 18:34:32 UTC 2016

Am 07.06.2016 um 00:54 schrieb Rafi Rubin:
> Compiling a static x11 program fails using the output of:
> 	pkg-config --static --libs x11
> The problem appears to be -lpthread shows up only before -lxcb.  There's
> something a bit odd in the pkg-config files.  x11.pc has pthread in
> Libs.private, and xcb has pthread-stubs in Requires.private.  However
> pthread-stubs isn't actually adding the -l flag to the output, and the
> resulting ordering breaks my build.
> So, which package should be correct: x11 or xcb?  Should the
> pthread-stubs have -lpthread in Libs.private?
> My versions:
> ibxcb1-dev 1.11.1-1
> libx11-dev 2:1.6.3-1
> libpthread-stubs0-dev 0.3-4

I'm on debian testing and my
/usr/lib/x86_64-linux-gnu/pkgconfig/pthread-stubs.pc contains "Libs:". If I
download pthread-stubs and hack it with the following patch, then your static
build works for me.

diff --git a/configure.ac b/configure.ac
index ef300ad..af00a14 100644
--- a/configure.ac
+++ b/configure.ac
@@ -38,7 +38,6 @@ m4_divert_pop([KILL])

 dnl Check which functions we need to provide aliases for.
-AC_CHECK_FUNCS(funclist, [], [PKG_CONFIG_LIBS='-L${libdir} -lpthread-stubs'])


And indeed:

$ nm --dynamic /lib/x86_64-linux-gnu/libc.so.6 | grep pthread_cond_signal
00000000000f50d0 T pthread_cond_signal
000000000011ee60 T pthread_cond_signal

So why does this fail static compilation? I looked for libc.a and ran:

$ ar x /usr/lib/x86_64-linux-gnu/libc.a
$ for x in *.o ; do readelf -a $x ; done | grep pthread_cond_signal

So the dynamic version of libc provides the pthread symbols (and thus
pthread-stubs figures out it is not needed) while the static version does not.

Report a bug against libc on debian? What do others think?

“Some people are worth melting for.” - Olaf

More information about the Xcb mailing list