Subject: bug#32254: Solaris 11.3 and missing GC_get_heap_usage_safe symbol

From: Mark H Weaver <[email-masked]>
Date: Thu, 02 Aug 2018 11:29:54 -0400

Hi Jeffrey,

Jeffrey Walton <[email-masked]> writes:

> I'm working on Solaris 11.3 with the 2.2.4 tarball. I'm trying to
> build and test Guile.
>
> Make is not completing the build step:
>
> solaris2:guile-2.2.4$ make V=1
> make  all-recursive
> make[1]: Entering directory '/export/home/build/guile-2.2.4'
> Making all in lib
> make[2]: Entering directory '/export/home/build/guile-2.2.4/lib'
> make  all-recursive
> make[3]: Entering directory '/export/home/build/guile-2.2.4/lib'
> make[4]: Entering directory '/export/home/build/guile-2.2.4/lib'
> make[4]: Nothing to be done for 'all-am'.
> make[4]: Leaving directory '/export/home/build/guile-2.2.4/lib'
> make[3]: Leaving directory '/export/home/build/guile-2.2.4/lib'
> make[2]: Leaving directory '/export/home/build/guile-2.2.4/lib'
> Making all in meta
> make[2]: Entering directory '/export/home/build/guile-2.2.4/meta'
> make[2]: Nothing to be done for 'all'.
> make[2]: Leaving directory '/export/home/build/guile-2.2.4/meta'
> Making all in libguile
> make[2]: Entering directory '/export/home/build/guile-2.2.4/libguile'
> make  all-am
> make[3]: Entering directory '/export/home/build/guile-2.2.4/libguile'
> /bin/sh ../libtool  --tag=CC   --mode=link gcc -std=gnu11
> -I/usr/local/include -D_REENTRANT -pthreads -Wall -Wmissing-prototypes
> -Wdeclaration-after-statement -Wpointer-arith -Wswitch-enum
> -fno-strict-aliasing -fwrapv -fvisibility=hidden -g2 -O2 -m64
> -march=native -fPIC -I/usr/local/include -D_REENTRANT -pthreads
> -L/usr/local/lib/64 -m64 -Wl,-R,/usr/local/lib/64 -o guile
> guile-guile.o libguile-2.2.la -lsocket -lnsl -ldl -lpthread -lm
> libtool: link: gcc -std=gnu11 -I/usr/local/include -D_REENTRANT
> -pthreads -Wall -Wmissing-prototypes -Wdeclaration-after-statement
> -Wpointer-arith -Wswitch-enum -fno-strict-aliasing -fwrapv
> -fvisibility=hidden -g2 -O2 -m64 -march=native -fPIC
> -I/usr/local/include -D_REENTRANT -pthreads -m64 -Wl,-R
> -Wl,/usr/local/lib/64 -o .libs/guile guile-guile.o
> -L/usr/local/lib/64 ./.libs/libguile-2.2.so -lbgc
> /usr/local/lib/64/libffi.so /usr/local/lib/64/libunistring.so
> /usr/local/lib/64/libiconv.so /usr/local/lib/64/libgmp.so -lltdl
> -lsocket -lnsl -ldl -lpthread -lm -pthreads -R/usr/local/lib/64
> Undefined                       first referenced
>  symbol                             in file
> GC_get_heap_usage_safe              ./.libs/libguile-2.2.so
> ld: fatal: symbol referencing errors
> collect2: error: ld returned 1 exit status

What version of the Boehm-Demers-Weiser garbage collector (BDW-GC
a.k.a. libgc) are you linking with here?

GC_get_heap_usage_safe has been part of BDW-GC's public API since
version 7.2, which is the minimum version supported by Guile 2.2, as
noted in our README.

Guile's configure script attempts to verify that you have BDW-GC 7.2 or
newer with the following code in configure.ac:

  #--------------------------------------------------------------------
  #
  # Boehm's GC library
  #
  #--------------------------------------------------------------------
  AC_MSG_CHECKING(for which bdw-gc pkg-config file to use)
  AC_ARG_WITH(bdw_gc, [  --with-bdw-gc=PKG       name of BDW-GC pkg-config file],
              [bdw_gc="$withval"], [bdw_gc=bdw-gc])
  AC_MSG_RESULT($bdw_gc)
  PKG_CHECK_MODULES([BDW_GC], [$bdw_gc >= 7.2])

However, if you don't have 'pkg-config' installed on your system, I
guess this check will be skipped.

     Regards,
       Mark