Compilieren von glibc-2.3.5 mit gcc-4.0.0 ??



  • Hallo,

    Ich bin gerade dabei die glibc zu kompilieren und bekomme immer folgende Fehlermeldung beim compilieren (nach der Eingabe von: make):

    ../sysdeps/ieee754/dbl-64/s_isinf.c:29: error: 'isinf' aliased to undefined symbol '__isinf'
    make[2]: *** [/mnt/lfs/sources/glibc-build/math/s_isinf.os] Error 1
    make[2]: Leaving directory `/mnt/lfs/sources/glibc-2.3.5/math'
    make[1]: *** [math/subdir_lib] Error 2
    make[1]: Leaving directory `/mnt/lfs/sources/glibc-2.3.5'
    make: *** [all] Error 2
    

    configure klappte jedenfalls ohne Probleme. Ich kann aber leider keine andere Version der glibc verwenden, denn die etwas älteren (<=2.3.4) meckern immer rum, das der Compiler zu alt sei. Ich glaube allerdings nicht das der gcc 4.0.0 zu alt ist. 🙄

    Das bisherige habe ich jedenfalls mit folgenden Befehlen durchgeführt:

    tar -xjf glibc-2.3.5.tar.bz2
    mkdir glibc-build
    cd glibc-build
    ../glibc-2.3.5/configure --prefix=/tools \
        --disable-profile --enable-add-ons=nptl --with-tls \
        --with-__thread --enable-kernel=2.6.0 \
        --with-binutils=/tools/bin --without-gd --without-cvs \
        --with-headers=/tools/glibc-kernheaders
    make
    

    Also wenn mir jemand einen Tip geben kann, ich bin jedenfalls schon jetzt dankbar 😉
    _______________________________________
    mfg Tobain



  • Tobain schrieb:

    Also wenn mir jemand einen Tip geben kann, ich bin jedenfalls schon jetzt dankbar 😉

    Mein Tipp: Halte dich ans Buch!

    Bisher habe ich mich auch immer auf's Mowl gepackt, wenn ich einzelne Paket durch neuere ersetzte, denn LFS ist (am Anfang) ein sehr labiles System! Hau lieber LFS nach ,,Vorschrift'' durch und aktualisiere dann die einzelnen Pakete.
    Speziell neuere Compilerversionen werden die hier immer wieder während des Compilierens einen Strich durch die Rechnung machen.

    Außerdem hast du generell nichts davon, wenn du ständig die neuesten Pakete haben willst (falls das alte ordentlich funktionierte)! Jedenfalls ist das meine Erfahrung (speziell mit Kerneln und [Windows-]Treibern).
    Allerdings gebe ich schon zu, dass die neue GCC-Version verlockend schnell ist...

    mfg



  • ... aber ich lief jedes mal in eine Falle, und jedes mal funktionierte irgend etwas beim compilieren nicht. Also habe ich mir mal etwas andere Versionen gezogen, und siehe da, es ging besser, allerdings fiel ich hier auch aufs Mundwerk.

    Ansonsten kompiliert der GCC4.0 ja einwandfrei, nur an der glibc bleibt er hängen. Ich kann aber auch keinen Fehler im Source erkennen:

    Datei: glibc-2.3.5/sysdeps/ieee754/dbl-64/s_isinf.c

    #include "math.h"
    #include "math_private.h"
    
    int
    __isinf (double x)
    {
    	int32_t hx,lx;
    	EXTRACT_WORDS(hx,lx,x);
    	lx |= (hx & 0x7fffffff) ^ 0x7ff00000;
    	lx |= -lx;
    	return ~(lx >> 31) & (hx >> 30);
    }
    hidden_def (__isinf)
    weak_alias (__isinf, isinf) //######################
    #ifdef NO_LONG_DOUBLE
    strong_alias (__isinf, __isinfl)
    weak_alias (__isinf, isinfl)
    #endif
    

    Bei der markierten Zeile meckert er, allerdings verstehe ich nicht warum, vor allem dieses Makro gibt mir zu denken... Kann mir vieleicht einer verraten wozu dies gut sein soll? (Ich spiele ja schon mit dem gedanken sie einfach auszukommentieren 😮 )

    Also die Definition des Makros scheint dies hier zu sein:
    Datei: glibc-2.3.5/include/libc-symbols.h

    #ifndef __ASSEMBLER__
    /* GCC understands weak symbols and aliases; use its interface where
       possible, instead of embedded assembly language.  */
    
    /* Define ALIASNAME as a strong alias for NAME.  */
    # define strong_alias(name, aliasname) _strong_alias(name, aliasname)
    # define _strong_alias(name, aliasname) \
      extern __typeof (name) aliasname __attribute__ ((alias (#name)));
    
    /* This comes between the return type and function name in
       a function definition to make that definition weak.  */
    # define weak_function __attribute__ ((weak))
    # define weak_const_function __attribute__ ((weak, __const__))
    
    # ifdef HAVE_WEAK_SYMBOLS
    
    /* Define ALIASNAME as a weak alias for NAME.
       If weak aliases are not available, this defines a strong alias.  */
    #  define weak_alias(name, aliasname) _weak_alias (name, aliasname)
    #  define _weak_alias(name, aliasname) \
      extern __typeof (name) aliasname __attribute__ ((weak, alias (#name)));
    
    /* Declare SYMBOL as weak undefined symbol (resolved to 0 if not defined).  */
    #  define weak_extern(symbol) _weak_extern (weak symbol)
    #  define _weak_extern(expr) _Pragma (#expr)
    
    # else
    
    #  define weak_alias(name, aliasname) strong_alias(name, aliasname)
    #  define weak_extern(symbol) /* Nothing. */
    
    # endif
    
    #else /* __ASSEMBLER__ */
    ...
    

    Also irgenwie fehlt mir das nötige wissen, um zu begreifen was dieses Makro dort anstellt. Also ich bin nachwievor für jeden Hinweis dankbar 🙂



  • Hi,

    hast du das Problem schon gelöst?
    ich hab den gleichen Fehler!


Log in to reply