diff --git a/src/configure.in b/src/configure.in
index 6e8e47d85e90891e5d79cbf2318b4e5f95630479..9adff1ae090dc4333e501ead1142750da3c99656 100644
--- a/src/configure.in
+++ b/src/configure.in
@@ -1,4 +1,4 @@
-AC_REVISION("$Id: configure.in,v 1.278 1999/04/25 21:06:39 grubba Exp $")
+AC_REVISION("$Id: configure.in,v 1.279 1999/04/29 10:48:28 mast Exp $")
 AC_INIT(interpret.c)
 AC_CONFIG_HEADER(machine.h)
 
@@ -2781,33 +2781,41 @@ AC_MSG_RESULT($LDSHARED)
 # CCSHARED are the C *flags* used to create objects to go into a shared
 # library -- this is only needed for a few systems
 AC_MSG_CHECKING(CCSHARED)
-if test -z "$CCSHARED" ; then
-  if test "$GCC" = yes ; then
-    case $pike_cv_sys_os in
-      BSD/OS*)
-	CCSHARED=""
-      ;;
-      Solaris*)
-        # The Image module runs out of symbol reference space unless we
-	# use the large PIC model:
-	# ld: fatal: too many symbols require `small' PIC references:
-        # 	have 2205, maximum 2048 -- recompile some modules -K PIC.
-	CCSHARED="-fPIC"
-      ;;
-      *)
-	CCSHARED="-fpic"
-      ;;
-    esac
-  else
-    case $pike_cv_sys_os in
-      hp*|HP*) CCSHARED="+z"; ;;
-      FreeBSD*) CCSHARED="-fpic";;
-      SCO_SV*) CCSHARED="-KPIC -dy -Bdynamic";;
-      Solaris*) CCSHARED="-KPIC -Bdynamic";;
-      Windows_NT*) CCSHARED="-shared" ;;
-    esac
+AC_CACHE_VAL(pike_cv_sys_ccshared,[
+  if test -z "$CCSHARED" ; then
+    if test "$GCC" = yes ; then
+      case $pike_cv_sys_os in
+	BSD/OS*)
+	  CCSHARED=""
+	;;
+	Solaris*)
+	  # The Image module runs out of symbol reference space unless we
+	  # use the large PIC model:
+	  # ld: fatal: too many symbols require `small' PIC references:
+	  # 	have 2205, maximum 2048 -- recompile some modules -K PIC.
+	  CCSHARED="-fPIC"
+	;;
+	*)
+	  CCSHARED="-fpic"
+	;;
+      esac
+    else
+      case $pike_cv_sys_os in
+	hp*|HP*) CCSHARED="+z"; ;;
+	FreeBSD*) CCSHARED="-fpic";;
+	SCO_SV*) CCSHARED="-KPIC -dy -Bdynamic";;
+	Solaris*) CCSHARED="-KPIC -Bdynamic";;
+	Windows_NT*) CCSHARED="-shared" ;;
+      esac
+    fi
   fi
-fi
+  OLD_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS $CCSHARED"
+  AC_TRY_COMPILE([], [int main() { exit(0); }],
+    pike_cv_sys_ccshared="$CCSHARED", pike_cv_sys_ccshared='')
+  CFLAGS="$OLD_CFLAGS"
+])
+CCSHARED="$pike_cv_sys_ccshared"
 AC_MSG_RESULT($CCSHARED)
 
 AC_MSG_CHECKING(LINKFORSHARED)