On 6/4/10, Clint Adams <sch...@debian.org> wrote: > On Fri, Jun 04, 2010 at 10:08:06PM -0300, Nicolás Alvarez wrote: >> I'm using a Debian testing/unstable mix. Most packages are from testing >> (squeeze). Today, I upgraded to libc from 2.10.2-9 to the version from >> unstable (2.11.1-2). After the upgrade, autoconf-generated configure >> scripts stopped working. They hang on this step: >> >> [...] >> checking whether a program can dlopen itself... yes >> checking whether a statically linked program can dlopen itself... > > I cannot reproduce this. Could you be more specific about which configure > script is involved?
Attached is the conftest.c that is being compiled by configure (after manually replacing the #include "confdefs.h" with the contents of that file). Compiler flags used: gcc -o conftest -g -O2 -DHAVE_DLFCN_H -Wl,--export-dynamic -static conftest.c -ldl -- Nicolas
#define STDC_HEADERS 1 #define HAVE_SYS_TYPES_H 1 #define HAVE_SYS_STAT_H 1 #define HAVE_STDLIB_H 1 #define HAVE_STRING_H 1 #define HAVE_MEMORY_H 1 #define HAVE_STRINGS_H 1 #define HAVE_INTTYPES_H 1 #define HAVE_STDINT_H 1 #define HAVE_UNISTD_H 1 #define HAVE_SYS_SOCKET_H 1 #define HAVE_DLFCN_H 1 #define LT_OBJDIR ".libs/" #if HAVE_DLFCN_H #include <dlfcn.h> #endif #include <stdio.h> #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = 0; if (self) { if (dlsym (self,"fnord")) status = 1; else if (dlsym( self,"_fnord")) status = 2; /* dlclose (self); */ } else puts (dlerror ()); return status; }