undefined `__terminate_set_func@GCC_3.0'

Chris G. Demetriou cgd@sibyte.com
Sun Feb 4 23:46:00 GMT 2001


Since you mentioned my patch, I figured I should at least look into
this.  8-)

I'm not an expert on symbol versioning either, or how libgcc is linked
shared.  Anyway, this is what I found:

per@bothner.com (Per Bothner) writes:
> I had configured with:
> 
> CFLAGS=-g /home/bothner/GNU/gcc/configure  --enable-threads=posix --prefix=/home/bothner/GNU/linux --enable-shared --enable-languages=c++,java

I did the equivalent (same, modulo paths) on an RH 6.0-ish system
using gcc 2.95.2 (installed using prefix /usr/local/sbtools-native
along with a set of binutils) as the compiler.

I ended up with the build output & error message:

/bin/sh ./libtool --mode=link /home/cgd/gcc-broken/build/gcc/gcj -B/home/cgd/gcc-broken/build/i686-pc-linux-gnu/libjava/ -B/home/cgd/gcc-broken/build/gcc/ -L/home/cgd/gcc-broken/build/i686-pc-linux-gnu/libjava -g   -ffloat-store  -o jv-convert --main=gnu.gcj.convert.Convert -rpath /home/cgd/gcc-broken/install/lib  gnu/gcj/convert/BytesToUnicode.lo gnu/gcj/convert/Convert.lo gnu/gcj/convert/Input_8859_1.lo gnu/gcj/convert/Input_ASCII.lo gnu/gcj/convert/Input_EUCJIS.lo gnu/gcj/convert/Input_JavaSrc.lo gnu/gcj/convert/Input_SJIS.lo gnu/gcj/convert/Input_UTF8.lo gnu/gcj/convert/Input_iconv.lo gnu/gcj/convert/IOConverter.lo gnu/gcj/convert/Output_8859_1.lo gnu/gcj/convert/Output_ASCII.lo gnu/gcj/convert/Output_EUCJIS.lo gnu/gcj/convert/Output_JavaSrc.lo gnu/gcj/convert/Output_SJIS.lo gnu/gcj/convert/Output_UTF8.lo gnu/gcj/convert/Output_iconv.lo gnu/gcj/convert/UnicodeToBytes.lo libgcj.la ./../boehm-gc/libgcjgc.la -L/home/cgd/gcc-broken/build/i686-pc-linux-gnu/libjava/../boehm-gc/.libs -lpthread ./../zlib/libzgcj.la -L/home/cgd/gcc-broken/build/i686-pc-linux-gnu/libjava/../zlib/.libs -L/home/cgd/gcc-broken/build/i686-pc-linux-gnu/libjava/.libs 
/home/cgd/gcc-broken/build/gcc/gcj -B/home/cgd/gcc-broken/build/i686-pc-linux-gnu/libjava/ -B/home/cgd/gcc-broken/build/gcc/ -g -ffloat-store -o .libs/jv-convert --main=gnu.gcj.convert.Convert gnu/gcj/convert/.libs/BytesToUnicode.o gnu/gcj/convert/.libs/Convert.o gnu/gcj/convert/.libs/Input_8859_1.o gnu/gcj/convert/.libs/Input_ASCII.o gnu/gcj/convert/.libs/Input_EUCJIS.o gnu/gcj/convert/.libs/Input_JavaSrc.o gnu/gcj/convert/.libs/Input_SJIS.o gnu/gcj/convert/.libs/Input_UTF8.o gnu/gcj/convert/.libs/Input_iconv.o gnu/gcj/convert/.libs/IOConverter.o gnu/gcj/convert/.libs/Output_8859_1.o gnu/gcj/convert/.libs/Output_ASCII.o gnu/gcj/convert/.libs/Output_EUCJIS.o gnu/gcj/convert/.libs/Output_JavaSrc.o gnu/gcj/convert/.libs/Output_SJIS.o gnu/gcj/convert/.libs/Output_UTF8.o gnu/gcj/convert/.libs/Output_iconv.o gnu/gcj/convert/.libs/UnicodeToBytes.o  -L/home/cgd/gcc-broken/build/i686-pc-linux-gnu/libjava ./.libs/libgcj.so -L/home/cgd/gcc-broken/build/i686-pc-linux-gnu/libjava/../libstdc++-v3/libsupc++ -lm -ldl ./../boehm-gc/.libs/libgcjgc.so -L/home/cgd/gcc-broken/build/i686-pc-linux-gnu/libjava/../boehm-gc/.libs -lpthread ./../zlib/.libs/libzgcj.so -L/home/cgd/gcc-broken/build/i686-pc-linux-gnu/libjava/../zlib/.libs -L/home/cgd/gcc-broken/build/i686-pc-linux-gnu/libjava/.libs -Wl,--rpath -Wl,/home/cgd/gcc-broken/install/lib
/usr/local/sbtools-native/bin/ld: warning: libgcc_s.so.0, needed by ./.libs/libgcj.so, not found (try using --rpath)
./.libs/libgcj.so: undefined reference to `__rethrow@@GCC_3.0'
./.libs/libgcj.so: undefined reference to `__terminate@@GCC_3.0'
./.libs/libgcj.so: undefined reference to `__eh_alloc@@GCC_3.0'
./.libs/libgcj.so: undefined reference to `__eh_free@@GCC_3.0'
./.libs/libgcj.so: undefined reference to `__get_eh_info@@GCC_3.0'
./.libs/libgcj.so: undefined reference to `__get_eh_table_language@@GCC_3.0'
./.libs/libgcj.so: undefined reference to `__terminate_set_func@@GCC_3.0'
./.libs/libgcj.so: undefined reference to `__throw@@GCC_3.0'
collect2: ld returned 1 exit status

in fact, i note that _all_ of those symbols seem to be properly in the
libgcc_s.so.0 that's been generated by the build process.  From the
warning message from libtool I'd guess that that library isn't being
used.

Perhaps you're only losing on __terminate_set_func because you have an
older libgcc_s.so.0 in your system, which is being used instead of the
newly built one?


It does sound like something's amiss with the usage (or lack of usage
8-) of the built shared libgcc during the rest of the build.


chris


More information about the Gcc-bugs mailing list