Menu

#316 wrong flag for ld when doing static build on OSF/1

open
5
2004-01-09
2004-01-09
No

For Tcl 8.4.5, when building the static lib (configure
--disable-shared) on Digital OSF/1 V4.0, the dynamic
loading tests in the Tcl test suite (gmake test) fail
because the -non_shared flag is used instead of the
-shared flag when building the dltest/pkg*.so files. I
traced the source of the problem to lines 1340-1344 in
unix/tcl.m4:

if test "$SHARED_BUILD" = "1" ; then
SHLIB_LD='ld -shared -expect_unresolved
"*"'
else
SHLIB_LD='ld -non_shared
-expect_unresolved "*"'
fi

I'm not sure why this is done. SHLIB_LD is
conventionally the macro for building shared libs, so
you would never want to use -non_shared anyway. Also,
the command for building the static lib on Digital
OSF/1 is "ar cr libtcl8.4.a ...", so "ld" isn't even
used in this case.

I was able to successfully build and test the static
lib using a modified dltest/Makefile:

$ diff dltest/Makefile.orig dltest/Makefile
12c12
< SHLIB_LD = ld -non_shared
-expect_unresolved "*"
---
> SHLIB_LD = ld -shared -expect_unresolved "*"

Since this is the only place in the static build where
SHLIB_LD is used, I think it is safe to modify
unix/tcl.m4 so that on line 1340, SHLIB_LD always gets
set like this:

SHLIB_LD='ld -shared -expect_unresolved "*"'

A similar fix may be needed for lines 1324-1328, but I
can't speak from my own experience for that platform.

Discussion