Ticket #152 (closed defect: invalid)

Opened 3 years ago

Last modified 2 years ago

PulseAudio 0.97 refuses to link (undefined reference to `_tls_get_addr')

Reported by: al3x Owned by: lennart
Milestone: Component: build-system
Keywords: ___tls_get_addr,pa_thread_mq_install, Cc:

Description

uname -a

Linux hole 2.6.23.1-hole #10 PREEMPT Mon Nov 5 16:57:31 EET 2007 i686 i686 i386 GNU/Linux

./configure --disable-hal --disable-dbus --disable-avahi -disable-glib2 --disable-lirc

CFLAGS: -g -O2 -std=gnu99 -Wall -W -Wextra -pedantic -pipe -Wformat -Wold-style-definition -Wdeclaration-after-statement -Wfloat-equal -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wredundant-decls -Wmissing-noreturn -Wshadow -Wendif-labels -Wpointer-arith -Wcast-align -Wwrite-strings -Winline -Wno-unused-parameter -ffast-math

Have X11: yes

Enable OSS: yes

Enable Alsa: yes

Enable Solaris: no

Enable GLib 2.0: no

Enable GConf: no

Enable Avahi: no

Enable Jack: no

Enable Async DNS: yes

Enable LIRC: no

Enable HAL: no

Enable TCP Wrappers: yes

Enable libsamplerate: yes

System User: pulse

System Group: pulse

Realtime Group: pulse-rt

Access Group: pulse-access

On the last stage of linking I'm getting an error

/bin/sh ../libtool --tag=CC --mode=link gcc -I../src -I../src/modules -I../src/modules/rtp -I../src/modules/gconf -pthread -D_POSIX_PTHREAD_SEMANTICS -I/usr/local/include -DPA_DLSEARCHPATH=\"/usr/local/lib/pulse-0.9/modules/\" -DPA_DEFAULT_CONFIG_DIR=\"/usr/local/etc/pulse\" -DPA_BINARY=\"/usr/local/bin/pulseaudio\" -DPA_SYSTEM_RUNTIME_PATH=\"/usr/local/var/run/pulse\" -DAO_REQUIRE_CAS '-DDEBUG_TRAP=asm("int $3")' -g -O2 -std=gnu99 -Wall -W -Wextra -pedantic -pipe -Wformat -Wold-style-definition -Wdeclaration-after-statement -Wfloat-equal -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wredundant-decls -Wmissing-noreturn -Wshadow -Wendif-labels -Wpointer-arith -Wcast-align -Wwrite-strings -Winline -Wno-unused-parameter -ffast-math -Wl,-no-undefined -o libpulsecore.la -rpath /usr/local/lib -version-info 4:0:0 libpulsecore_la-channelmap.lo libpulsecore_la-error.lo libpulsecore_la-mainloop.lo libpulsecore_la-mainloop-api.lo libpulsecore_la-mainloop-signal.lo libpulsecore_la-sample.lo libpulsecore_la-timeval.lo libpulsecore_la-utf8.lo libpulsecore_la-util.lo libpulsecore_la-volume.lo libpulsecore_la-xmalloc.lo libpulsecore_la-autoload.lo libpulsecore_la-cli-command.lo libpulsecore_la-cli-text.lo libpulsecore_la-client.lo libpulsecore_la-conf-parser.lo libpulsecore_la-core.lo libpulsecore_la-core-scache.lo libpulsecore_la-core-subscribe.lo libpulsecore_la-core-util.lo libpulsecore_la-dynarray.lo libpulsecore_la-g711.lo libpulsecore_la-hashmap.lo libpulsecore_la-idxset.lo libpulsecore_la-log.lo libpulsecore_la-mcalign.lo libpulsecore_la-memblock.lo libpulsecore_la-memblockq.lo libpulsecore_la-memchunk.lo libpulsecore_la-modargs.lo libpulsecore_la-modinfo.lo libpulsecore_la-ltdl-helper.lo libpulsecore_la-module.lo libpulsecore_la-namereg.lo libpulsecore_la-pid.lo libpulsecore_la-pipe.lo libpulsecore_la-play-memchunk.lo libpulsecore_la-play-memblockq.lo libpulsecore_la-poll.lo libpulsecore_la-props.lo libpulsecore_la-queue.lo libpulsecore_la-random.lo libpulsecore_la-resampler.lo libpulsecore_la-sample-util.lo libpulsecore_la-sconv.lo libpulsecore_la-sconv-s16be.lo libpulsecore_la-sconv-s16le.lo libpulsecore_la-sink.lo libpulsecore_la-sink-input.lo libpulsecore_la-sioman.lo libpulsecore_la-sound-file.lo libpulsecore_la-sound-file-stream.lo libpulsecore_la-source.lo libpulsecore_la-source-output.lo libpulsecore_la-strbuf.lo libpulsecore_la-tokenizer.lo libpulsecore_la-core-error.lo libpulsecore_la-hook-list.lo libpulsecore_la-shm.lo libpulsecore_la-flist.lo libpulsecore_la-asyncmsgq.lo libpulsecore_la-asyncq.lo libpulsecore_la-thread-mq.lo libpulsecore_la-fdsem.lo libpulsecore_la-object.lo libpulsecore_la-msgobject.lo libpulsecore_la-rtsig.lo libpulsecore_la-rtpoll.lo libpulsecore_la-rtclock.lo libpulsecore_la-once.lo libpulsecore_la-time-smoother.lo libpulsecore_la-mutex-posix.lo libpulsecore_la-thread-posix.lo libpulsecore_la-semaphore-posix.lo -lltdl -L/usr/local/lib -lsamplerate -lsndfile -L/usr/local/lib -loil-0.3 -lm libspeex-resampler-fixed.la libspeex-resampler-float.la libffmpeg-resampler.la -lrt -ldl -lm -latomic_ops gcc -shared .libs/libpulsecore_la-channelmap.o .libs/libpulsecore_la-error.o .libs/libpulsecore_la-mainloop.o .libs/libpulsecore_la-mainloop-api.o .libs/libpulsecore_la-mainloop-signal.o .libs/libpulsecore_la-sample.o .libs/libpulsecore_la-timeval.o .libs/libpulsecore_la-utf8.o .libs/libpulsecore_la-util.o .libs/libpulsecore_la-volume.o .libs/libpulsecore_la-xmalloc.o .libs/libpulsecore_la-autoload.o .libs/libpulsecore_la-cli-command.o .libs/libpulsecore_la-cli-text.o .libs/libpulsecore_la-client.o .libs/libpulsecore_la-conf-parser.o .libs/libpulsecore_la-core.o .libs/libpulsecore_la-core-scache.o .libs/libpulsecore_la-core-subscribe.o .libs/libpulsecore_la-core-util.o .libs/libpulsecore_la-dynarray.o .libs/libpulsecore_la-g711.o .libs/libpulsecore_la-hashmap.o .libs/libpulsecore_la-idxset.o .libs/libpulsecore_la-log.o .libs/libpulsecore_la-mcalign.o .libs/libpulsecore_la-memblock.o .libs/libpulsecore_la-memblockq.o .libs/libpulsecore_la-memchunk.o .libs/libpulsecore_la-modargs.o .libs/libpulsecore_la-modinfo.o .libs/libpulsecore_la-ltdl-helper.o .libs/libpulsecore_la-module.o .libs/libpulsecore_la-namereg.o .libs/libpulsecore_la-pid.o .libs/libpulsecore_la-pipe.o .libs/libpulsecore_la-play-memchunk.o .libs/libpulsecore_la-play-memblockq.o .libs/libpulsecore_la-poll.o .libs/libpulsecore_la-props.o .libs/libpulsecore_la-queue.o .libs/libpulsecore_la-random.o .libs/libpulsecore_la-resampler.o .libs/libpulsecore_la-sample-util.o .libs/libpulsecore_la-sconv.o .libs/libpulsecore_la-sconv-s16be.o .libs/libpulsecore_la-sconv-s16le.o .libs/libpulsecore_la-sink.o .libs/libpulsecore_la-sink-input.o .libs/libpulsecore_la-sioman.o .libs/libpulsecore_la-sound-file.o .libs/libpulsecore_la-sound-file-stream.o .libs/libpulsecore_la-source.o .libs/libpulsecore_la-source-output.o .libs/libpulsecore_la-strbuf.o .libs/libpulsecore_la-tokenizer.o .libs/libpulsecore_la-core-error.o .libs/libpulsecore_la-hook-list.o .libs/libpulsecore_la-shm.o .libs/libpulsecore_la-flist.o .libs/libpulsecore_la-asyncmsgq.o .libs/libpulsecore_la-asyncq.o .libs/libpulsecore_la-thread-mq.o .libs/libpulsecore_la-fdsem.o .libs/libpulsecore_la-object.o .libs/libpulsecore_la-msgobject.o .libs/libpulsecore_la-rtsig.o .libs/libpulsecore_la-rtpoll.o .libs/libpulsecore_la-rtclock.o .libs/libpulsecore_la-once.o .libs/libpulsecore_la-time-smoother.o .libs/libpulsecore_la-mutex-posix.o .libs/libpulsecore_la-thread-posix.o .libs/libpulsecore_la-semaphore-posix.o -Wl,--whole-archive ./.libs/libspeex-resampler-fixed.a ./.libs/libspeex-resampler-float.a ./.libs/libffmpeg-resampler.a -Wl,--no-whole-archive /usr/lib/libltdl.so -L/usr/local/lib /usr/local/lib/libsamplerate.so -lsndfile /usr/local/lib/liboil-0.3.so -lrt -ldl -lm -latomic_ops -pthread -Wl,-no-undefined -Wl,-soname -Wl,libpulsecore.so.4 -o .libs/libpulsecore.so.4.0.0

.libs/libpulsecore_la-thread-mq.o(.text+0x2cf): In function `pa_thread_mq_install': pulsecore/thread-mq.c:44: undefined reference to `_tls_get_addr'

.libs/libpulsecore_la-thread-mq.o(.text+0x337): In function `pa_thread_mq_get': pulsecore/thread-mq.c:44: undefined reference to `_tls_get_addr'

collect2: ld returned 1 exit status

make[3]: *** [libpulsecore.la] Error 1

Change History

Changed 3 years ago by bunjiboys

I had the same problem on a Debian 4.0. After a LOT of googling i found a solution that allowed me to compile it properly. The problems is that there are some options passed to the linker which makes it croak on this error (-Wl,-no-undefined). So what you can do is to tell the linker to ignore this but changing /usr/lib/libc.so (this is a text file). Normally the content would be something like:

/* GNU ld script
   Use the shared library, but some functions are only in
   the static library, so try that secondarily.  */
OUTPUT_FORMAT(elf32-i386)
GROUP ( /lib/libc.so.6 /usr/lib/libc_nonshared.a )

You now change it to:

/* GNU ld script
   Use the shared library, but some functions are only in
   the static library, so try that secondarily.  */
OUTPUT_FORMAT(elf32-i386)
GROUP ( /lib/libc.so.6 /usr/lib/libc_nonshared.a AS_NEEDED ( /lib/ld-linux.so.2 ) )

If you are running on a 64bit system you might need to change the /lib/ld-linux.so.2 reference to /lib64/ld-linux-x86-64.so.2. If you wanna dig around, i found the "solution" at http://www.mailinglistarchive.com/gcc@gcc.gnu.org/msg04203.html

Changed 3 years ago by al3x

  • status changed from new to closed
  • resolution set to fixed

Yes, thanks a lot - editing /usr/lib/libc.so fixed the problem - IMHO worth of including into FAQ.

Changed 3 years ago by lievenmoors

  • priority changed from normal to high
  • resolution fixed deleted
  • status changed from closed to reopened
  • component changed from daemon to build-system
  • summary changed from PulseAudio 0.97 refuses to link on Centos-4.5 (undefined reference to `_tls_get_addr') to PulseAudio 0.97 refuses to link (undefined reference to `_tls_get_addr')

I have the same problem on my LFS system. The solution presented here does not work for me, as I am using an older glibc, which does not accept the AS_NEEDED keyword. I think a lot more users are unable to solve this problem. I have compiled thousands of programs before, and have never seen this problem during compilation.

Changed 3 years ago by frosgate

I ran into the same problem building on Slackware 11.0. Adding the AS_NEEDED entry did not work, as the version of binutils that comes stock with Slackware 11.0, binutils-2.15.92.0.2, was too old to recognize that keyword. I upgraded binutils to version 2.18, and then was able to use the AS_NEEDED keyword to resolve this issue.

Changed 2 years ago by lennart

  • status changed from reopened to closed
  • resolution set to invalid

Uh, this is not a bug in PA, but in your gcc+glibc combo then. Closing this now.

Note: See TracTickets for help on using tickets.