tech-x11 archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

static linking glxgears and glxinfo now fails (mult. def. _glapi_tls_Context, etc.)



Glxgears and glxinfo will no longer build in my static-linked environment.

I don't know what's changed to cause this since I last updated current
(quite some time ago, around about 8.99.32 for both src and xsrc) and
built everything, but something has, and I can't quite figure out what
to do about it.

Perhaps common "global" variables in TLS aren't being merged by the
linker?  Maybe I can/should just turn off -DGLX_USE_TLS for libGL and
libglapi?  But why do both libraries define these same variables in
objects that are pulled in?  (see below for symbols in likely modules)


$ mynbmake dependall
       link  glxgears/glxgears
/build/woods/future/current-amd64-amd64-tools/lib/gcc/x86_64--netbsd/8.4.0/../../../../x86_64--netbsd/bin/ld: /build/woods/future/current-amd64-destdir/usr/X11R7/lib/libglapi.a(u_current.o):(.tbss+0x0): multiple definition of `_glapi_tls_Context'; /build/woods/future/current-amd64-destdir/usr/X11R7/lib/libGL.a(glxcurrent.o):(.tbss+0x0): first defined here
/build/woods/future/current-amd64-amd64-tools/lib/gcc/x86_64--netbsd/8.4.0/../../../../x86_64--netbsd/bin/ld: /build/woods/future/current-amd64-destdir/usr/X11R7/lib/libglapi.a(u_current.o):(.tbss+0x8): multiple definition of `_glapi_tls_Dispatch'; /build/woods/future/current-amd64-destdir/usr/X11R7/lib/libGL.a(glxcurrent.o):(.tbss+0x8): first defined here
collect2: error: ld returned 1 exit status

*** Failed target:  glxgears
*** Failed command: /build/woods/future/current-amd64-amd64-tools/bin/x86_64--netbsd-gcc --sysroot=/build/woods/future/current-amd64-destdir -Wl,-z,relro -L/build/woods/future/current-amd64-destdir/usr/X11R7/lib -Wl,-rpath-link,/build/woods/future/current-amd64-destdir/usr/X11R7/lib -Wl,-rpath,/usr/X11R7/lib -static -o glxgears glxgears.o -lGL -lXxf86vm -lXfixes -lXdamage -lglapi -ldrm -lpci -lX11-xcb -lxcb-dri2 -lxcb-glx -lXext -lX11 -lxcb -lXau -lXdmcp -lexpat -lpthread -lm
*** Error code 1

Stop.
nbmake[1]: stopped in /more/work/woods/m-NetBSD-current/external/mit/xorg/bin/glxgears

*** Failed target:  dependall
*** Failed command: cd "/more/work/woods/m-NetBSD-current/external/mit/xorg/bin/glxgears"; /build/woods/future/current-amd64-amd64-tools/bin/nbmake realall
*** Error code 1

Stop.
nbmake: stopped in /more/work/woods/m-NetBSD-current/external/mit/xorg/bin/glxgears



Below is the patch for static-linking glxgears/Makefile (the same is
needed for glxinfo, and many similar patches are required throughout
xorg).  I had to add -lexpat since the update as well -- it was not
required for 8.99.32.

Index: external/mit/xorg/bin/glxgears/Makefile
===================================================================
RCS file: /cvs/master/m-NetBSD/main/src/external/mit/xorg/bin/glxgears/Makefile,v
retrieving revision 1.4
diff -u -r1.4 Makefile
--- external/mit/xorg/bin/glxgears/Makefile	18 Dec 2014 06:24:28 -0000	1.4
+++ external/mit/xorg/bin/glxgears/Makefile	2 Jun 2020 03:55:37 -0000
@@ -8,8 +8,8 @@

 CPPFLAGS+=${X11FLAGS.THREADS}

-LDADD+=	-lGL -lXext -lX11 -lpthread -lm
-DPADD+=	${LIBGL} ${LIBXEXT} ${LIBX11} ${LIBPTHREAD} ${LIBM}
+LDADD+=	-lGL -lXxf86vm -lXfixes -lXdamage -lglapi -ldrm -lpci -lX11-xcb -lxcb-dri2 -lxcb-glx -lXext -lX11 -lxcb -lXau -lXdmcp -lexpat -lpthread -lm
+DPADD+=	${LIBGL} ${LIBXF86VM} ${LIBXFIXES} ${LIBXDAMAGE} ${LIBGLAPI} ${LIBDRM} ${LIBPCI} ${LIBX11_XCB} ${LIBXCB_DRI} ${LIBXCB_GLX} ${LIBXEXT} ${LIBX11} ${LIBXCB} ${LIBXAU} ${LIBXDMCP} ${LIBEXPAT} ${LIBPTHREAD} ${LIBM}

 .PATH:	${X11SRCDIR.mesa-demos}/src/xdemos



FYI, here's what's in each module that I think is causing the problems:

libGL.a(glxcurrent.o):
00000000000000a2 t MakeContextCurrent
                 U _GLOBAL_OFFSET_TABLE_
                 U __glXInitVertexArrayState
                 U __glXSendError
0000000000000000 T __glXSetCurrentContext
0000000000000021 T __glXSetCurrentContextNull
0000000000000010 B __glX_tls_Context
0000000000000000 D __glXmutex
                 U __libc_mutex_lock
                 U __libc_mutex_unlock
                 U _glapi_check_multithread
                 U _glapi_set_context
                 U _glapi_set_dispatch
0000000000000000 B _glapi_tls_Context
0000000000000008 B _glapi_tls_Dispatch
0000000000000060 b dummyBuffer
0000000000000040 D dummyContext
0000000000000000 b dummyVtable
                 U glGetString
000000000000004f T glXGetCurrentContext
0000000000000074 T glXGetCurrentDrawable
00000000000000a2 T glXMakeContextCurrent
0000000000000367 T glXMakeCurrent
00000000000000a2 T glXMakeCurrentReadSGI


libglapi.a(u_current.o):
                 U _GLOBAL_OFFSET_TABLE_
0000000000000017 T _glapi_get_context
0000000000000057 T _glapi_get_dispatch
0000000000000000 B _glapi_tls_Context
0000000000000008 B _glapi_tls_Dispatch
                 U stub_init_once
                 U table_noop_array
0000000000000000 T u_current_destroy
0000000000000001 T u_current_init
0000000000000002 T u_current_set_context
000000000000002c T u_current_set_table

--
					Greg A. Woods <gwoods%acm.org@localhost>

Kelowna, BC     +1 250 762-7675           RoboHack <woods%robohack.ca@localhost>
Planix, Inc. <woods%planix.com@localhost>     Avoncote Farms <woods%avoncote.ca@localhost>

Attachment: pgp5Sg7KC7yaO.pgp
Description: OpenPGP Digital Signature



Home | Main Index | Thread Index | Old Index