Right. dlsym(RTLD_NEXT, "open") will give you the one that you shadowed;
this might not be the real symbol yet as there may be other wrappers
loaded, and it might not be the one from libc as applications are
allowed to provide their own definitions of symbols and have them take
precedence.

That looks like what I'm looking for. I don't seem to find an analogous
flag for lt_dlsym, in libtool's documentation, so I'll go with native
dlsym, then.

RTLD_NEXT seems like a better choice, but just in case I am using the following Autoconf stuff:

m4/libc-so-name.m4:
dnl Sets the variables LIBC_SO_NAME and LIBC_SO_DIR to the directory
dnl and basename for the C library.
AC_DEFUN([GST_LIBC_SO_NAME],
[AC_CACHE_CHECK([how to dlopen the C library], gst_cv_libc_so_name, [
  if test $GCC = yes; then
    gst_lib_path=`$CC --print-multi-os-directory $CFLAGS $CPPFLAGS`
    case $gst_lib_path in
      .) gst_lib_path= ;;
      *) gst_lib_path=$gst_lib_path/ ;;
    esac
  else
    gst_lib_path=
  fi
  case $gst_lib_path in
    /*) gst_libc_search_path="${gst_lib_path}libc.so*
          ${gst_lib_path}libc-*.so
          ${gst_lib_path}libc.sl
          ${gst_lib_path}libSystem.dylib" ;;
    *) gst_libc_search_path="/shlib/libc.so \
        /lib/${gst_lib_path}libc.so* \
        /usr/lib/${gst_lib_path}libc.so.* \
        /usr/lib/${gst_lib_path}libc.sl \
        /lib/${gst_lib_path}libc-*.so \
        /System/Library/Frameworks/System.framework/System \
        /usr/lib/libSystem.dylib"
  esac

  gst_lib_sysroot=`$CC --print-sysroot`
  for i in $gst_libc_search_path; do
    if test -f "$gst_lib_sysroot$i"; then
      oldwd=`pwd`
      gst_cv_libc_so_name=`basename $i`
      gst_cv_libc_so_dir=`dirname $i`
      cd "$gst_cv_libc_so_dir" && gst_cv_libc_so_dir=`pwd`
      cd $oldwd
      break
    fi
  done])
LIBC_SO_NAME=$gst_cv_libc_so_name
LIBC_SO_DIR=$gst_cv_libc_so_dir
AC_SUBST(LIBC_SO_NAME)
AC_SUBST(LIBC_SO_DIR)
])

libc.la.in:
# libc.la - a libtool library file
# Generated by GNU libtool
# Created for GNU Smalltalk's dynamic loading mechanism.

# The name that we can dlopen(3).
dlname='@LIBC_SO_NAME@'

# Names of this library.
library_names='@LIBC_SO_NAME@'

# Libraries that this one depends upon.
dependency_libs=''

# Is this an already installed library?
installed=yes

# Directory that this library needs to be installed in:
libdir='@LIBC_SO_DIR@'

in configure.ac:
GST_LIBC_SO_NAME
AC_CONFIG_FILES([libc.la])



_______________________________________________
http://lists.gnu.org/mailman/listinfo/libtool

Reply via email to