Construire GCC avec glibc dans un emplacement non standard sans root

J’ai un système auquel je n’ai pas d’access root, mais j’ai besoin d’installer la version actuelle de GCC (4.7.2).

Le système exécute une version x86_64 de Linux 2.6.18 et a déjà GCC 4.1 (sans prise en charge de C ++ même si –version indique qu’il a été construit avec lui).

EDIT 5: À ce stade, les étapes ci-dessous ne sont qu’un ensemble de choses que j’ai essayées. J’ai commencé à nettoyer plusieurs fois depuis lors. Je cherche quelqu’un pour détailler l’ordre exact dont j’ai besoin pour tout faire avec tous les commutateurs requirejs.

C’est le processus que j’ai parcouru jusqu’à présent (où ROOT est un dossier dans mon répertoire personnel)

make-3.82>./configure --prefix=$ROOT && make && make install && hash -r binutils-2.23>./configure --prefix=$ROOT && make && make install autoconf-2.69>./configure --prefix=$ROOT && make && make install automake-1.9>./configure --prefix=$ROOT && make && make install flex-2.5.37>./configure --prefix=$ROOT && make && make install libunwind-1.1>./configure --prefix=$ROOT && make && make install gcc-4.7.2-scratch>../gcc-4.7.2/configure --prefix=$ROOT \ --disable-multilib --disable-nls --enable-languages=c,c++ \ && make && make install && hash -r ncurses-5.9>./configure --prefix=$ROOT && make && make install texinfo-4.13>./configure --prefix=$ROOT && make && make install glibc-2.14-scratch>touch $ROOT/etc/ld.so.conf 

Patch glibc avec le correctif de http://sourceforge.net/apps/trac/unattended/wiki/ModifyingTheBootDisk#PatchGLibc (correction des numéros de ligne pour 2.14)

 glibc-2.14-scratch>../glibc-2.14/configure --prefix=$ROOT \ --with-headers=$3_3_4_HEADERS && make && make install 

Les drapeaux que j’ai ajoutés devaient se débarrasser de la undefined reference to '__isoc99_sscanf' . Je ne sais pas quelle combinaison de drapeaux était réellement nécessaire pour résoudre ce problème, mais cela a résolu le problème avec ces drapeaux.

 gcc-4.7.2-scratch2>../gcc-4.7.2/configure --prefix=$ROOT \ --disable-multilib --disable-nls --enable-languages=c,c++ \ CPPFLAGS="-I$ROOT/include" CFLAGS="-g -O2 -lc" \ CXXFLAGS="-g -O2 -lc" LDFLAGS="-L$ROOT/lib \ -L$ROOT/lib64" && make && make install 

Maintenant, je reçois cette erreur lors de la construction de GCC:

 build/genmddeps ../../gcc-4.7.2/gcc/config/i386/i386.md > tmp-mddeps build/genmddeps: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by build/genmddeps) 

L’erreur a du sens car la libc dans / lib64 est la version 2.5, mais je ne sais pas comment faire pour que GCC utilise celle que j’ai construite et installée sur $ ROOT / lib.

EDIT 1: L’ajout de -rpath n’a pas aidé, mais j’ai ajouté mes répertoires lib à LD_RUN_PATH et LD_LIBRARY_PATH. Avec ces réglages, je ne pouvais rien exécuter car je recevais l’erreur [program_name]: error while loading shared libraries: /home/mrambiguous/root/lib/libc.so.6: ELF file OS ABI invalid

Une autre chose étrange à noter est que lorsque j’ai essayé la suggestion -rpath, j’ai commencé à recevoir des erreurs de GCC à propos des options de ligne de commande non reconnues (telles que -V). J’ai dû le configurer pour utiliser le GCC du système 4.1. Maintenant, je ne sais pas si ma première version de GCC a été corrompue ou si elle a déjà été utilisée.

EDIT 2: Je viens d’ouvrir libc.so.6 dans vim pour voir si je pouvais trouver quelque chose à propos de l’ABI en texte brut et il y a les informations de copyright. libc ABIs: UNIQUE IFUNC

Cela confirme également que GCC 4.7.2 travaillait dans ce même bloc de texte. Comstackd by GNU CC version 4.7.2

EDIT 3: Supprimé $ ROOT, tout réinstallé, même problème de ne pas reconnaître -V et -qversion comme options valides.

EDIT 4: J’ai essayé de modifier l’en-tête ELF en utilisant brandelf -t SVR4 libc.so.6 , mais cela me donne simplement une nouvelle erreur unexpected PLT reloc type 0x25

Je suis pressé pour ne pas pouvoir parsingr vos messages d’erreur en détail.

Les nouvelles glibc et les anciennes glibc sont non seulement incompatibles avec l’ABI, mais aussi les en-têtes, voir le bogue 52922 de gcc .

Par conséquent, tout mélange entraînera des erreurs telles que vous avez rencontré, vous devez être extrêmement prudent.

Le réglage de la main est désespérément fastidieux.

Si votre objective est d’utiliser gcc-4.7.2, je vous recommande de préfixer Gentoo . J’ai de nombreuses instances de Gentoo Prefix fonctionnant sur RHEL 5 (qui ont le kernel 2.6.18, gcc-4.1 et glibc-2.5 comme vous). Ceci comstack gcc-4.7.2 sur glibc-2.5.

Si vous voulez vous amuser à utiliser la nouvelle glibc, jetez un coup d’œil à Prefix / libc . C’est un travail en cours cependant. Attendez-vous à de nombreuses ruptures. Mais ce ne sera pas un gros inconvénient car vous essayez de comstackr une chaîne d’outils moderne à la main, n’est-ce pas?