static linking

Alexandre Oliva oliva at
Sun Apr 11 14:25:56 PDT 1999

On Apr 11, 1999, Kiyo Inaba <inaba at> wrote:

> Still libtool tries to link with ltdl.lo rather than with ltdl.o when
> I did not specify '--disable-shared'.

Yup, this is even documented in kaffe/FAQ/FAQ.libtool.
--with-staticvm and --with-staticlib are Kaffe-specific flags, that do 
not affect libltdl at all.  --disable-shared is for all
libtool-generated libraries, so it ends up causing libltdl to be
static too.

> Xgcc -g -Wall -Wstrict-prototypes -L/usr/local/lib -o Kaffe main.o .libs/KaffeS.o ../../libraries/clib/native/.libs/libnative.a -lm ../../libraries/clib/net/.libs/libnet.a ../../libraries/clib/io/.libs/libio.a ../../libraries/clib/zip/.libs/libzip.a -lz ../../libraries/clib/math/.libs/libmath.a -lm ../../libraries/clib/management/.libs/libmanagement.a ../kaffevm/.libs/libkaffevm.a -lgcc -lm
> Xld: symbol __GLOBAL_OFFSET_TABLE_ remains undefined

This smells very much like a bug in FreeBSD's ld that libtool had to
work around.  Considering that FreeBSD and NetBSD share common roots,
it doesn't sound surprising to me :-(

In the generated libtool script (or in, if you prefer),
you'll find the following case statement:

	  case "$host" in
	  # compiling the symbol table file with pic_flag works around
	  # a FreeBSD bug that causes programs to crash when -lm is
	  # linked before any other PIC object.  But we must not use
	  # pic_flag when linking with -static.  The problem exists in
	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
	    case "$compile_command " in
	    *" -static "*) ;;
	    *) pic_flag_for_symtable=" $pic_flag -DPIC -DFREEBSD_WORKAROUND";;

Please try:


instead of:


Please tell me if it works, so that I can introduce this work-around
in libtool and Kaffe.

Alexandre Oliva IC-Unicamp, Brasil
{oliva,Alexandre.Oliva}  aoliva@{,}
*** E-mail about software projects will be forwarded to mailing lists

More information about the kaffe mailing list