This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: libsupc++.a(eh_globals.o): In function `__gnu_internal::get_global()': undefined reference to `___tls_get_addr'
- From: Ian Lance Taylor <iant at google dot com>
- To: "yang xiaoxin" <yang dot xiaoxin at gmail dot com>
- Cc: gcc at gcc dot gnu dot org
- Date: 13 Jun 2006 08:35:17 -0700
- Subject: Re: libsupc++.a(eh_globals.o): In function `__gnu_internal::get_global()': undefined reference to `___tls_get_addr'
- References: <ecfd6ae20606122316s7fd000d8l767ff09fb4c4eb1d@mail.gmail.com>
"yang xiaoxin" <yang.xiaoxin@gmail.com> writes:
> Building project store
> =============
> /usr/src/rpm/BUILD/OOB680_m5/store/source
> -------------
> /usr/src/rpm/BUILD/OOB680_m5/store/util
> ------------------------------
> Making: ../unxlngi6.pro/lib/libstore.so.3
> g++ -Wl,-z,combreloc -Wl,-z,defs -Wl,-rpath,'$ORIGIN'
> "-Wl,-hlibstore.so.3" -shared -Wl,-O1 -Wl,--version-script
> ../unxlngi6.pro/misc/store_store.map -L../unxlngi6.pro/lib -L../lib
> -L/usr/src/rpm/BUILD/OOB680_m5/solenv/unxlngi6/lib
> -L/usr/src/rpm/BUILD/OOB680_m5/solver/680/unxlngi6.pro/lib
> -L/usr/src/rpm/BUILD/OOB680_m5/solenv/unxlngi6/lib -L/usr/lib
> -L/usr/jre/lib/i386 -L/usr/jre/lib/i386/client
> -L/usr/jre/lib/i386/native_threads -L/usr/X11R6/lib
> -L/usr/lib/firefox-1.5.0.1 ../unxlngi6.pro/slo/store_version.o
> ../unxlngi6.pro/slo/store_description.o -o
> ../unxlngi6.pro/lib/libstore.so.3 ../unxlngi6.pro/slo/object.o
> ../unxlngi6.pro/slo/memlckb.o ../unxlngi6.pro/slo/filelckb.o
> ../unxlngi6.pro/slo/storbase.o ../unxlngi6.pro/slo/storcach.o
> ../unxlngi6.pro/slo/stordata.o ../unxlngi6.pro/slo/storlckb.o
> ../unxlngi6.pro/slo/stortree.o ../unxlngi6.pro/slo/storpage.o
> ../unxlngi6.pro/slo/store.o -luno_sal -lsupc++ -lgcc_s -ldl -lpthread
> -lm
> /usr/lib/libsupc++.a(eh_globals.o): In function `__gnu_internal::get_global()':
> : undefined reference to `___tls_get_addr'
> collect2: ld 返回 1
> dmake: Error code 1, while making '../unxlngi6.pro/lib/libstore.so.3'
> '---* tg_merge.mk *---'
>
> ERROR: Error 65280 occurred while making /usr/src/rpm/BUILD/OOB680_m5/store/util
> dmake: Error code 1, while making 'build_instsetoo_native'
>
>
> What's the problem?
Well, your libstdc++ was configured for a system which supports TLS
(Thread Local Storage). That causes it to call __tls_get_addr in some
cases. And you are explicitly linking against -lsupc++, which is an
archive, not a shared library. This means that your program has a
direct reference to __tls_get_addr which needs to be satisfied.
Normally __tls_get_addr is defined by the dynamic linker itself. When
linking an executable, one normally links against the dynamic linker,
so the symbol reference is satisfied. When linking a shared library,
one normally does not link against the dynamic linker, but that's OK
because shared libraries are permitted to have undefined references.
However, you are linking with -z defs, which directs the linker to
prohibit undefined references even though it is linking a shared
library.
So you get an error.
Hope this helps.
Ian