[Gentoo - gcc] Error compilando gcc-4.1.1

Buenas compañeros,

Abro este hilo nuevo porque no creo que sea una buena idea meterlo en el del anuncio de la 2006.1

Aprovechando que tengo algo de tiempo libre y que se ha liberado la 2006.1, he estado leyendo los hilos que hablan al respecto y algo de la doc de gentoo.org y me he decidido a actualizar el sistema.

En primer lugar, siguiendo la guía de actualización de gcc 3.3 a 3.4 o superior, he procedido con emerge -u gcc. Pero me he encontrado con el siguiente error:

stage1/xgcc -Bstage1/ -B/usr/i686-pc-linux-gnu/bin/ -c -march=pentium4 -O2 -pipe -fstack-protector -fprofile-generate -DIN_GCC -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -pedantic -Wno-long-long -Wno-variadic-macros -Wold-style-definition -Wmissing-format-attribute -DHAVE_CONFIG_H -DGENERATOR_FILE -I. -Ibuild -I/var/tmp/portage/gcc-4.1.1/work/gcc-4.1.1/gcc -I/var/tmp/portage/gcc-4.1.1/work/gcc-4.1.1/gcc/build -I/var/tmp/portage/gcc-4.1.1/work/gcc-4.1.1/gcc/../include -I/var/tmp/portage/gcc-4.1.1/work/gcc-4.1.1/gcc/../libcpp/include -o build/genmodes.o /var/tmp/portage/gcc-4.1.1/work/gcc-4.1.1/gcc/genmodes.c
stage1/xgcc -Bstage1/ -B/usr/i686-pc-linux-gnu/bin/ -c -march=pentium4 -O2 -pipe -fstack-protector -fprofile-generate -DIN_GCC -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -pedantic -Wno-long-long -Wno-variadic-macros -Wold-style-definition -Wmissing-format-attribute -DHAVE_CONFIG_H -DGENERATOR_FILE -I. -Ibuild -I/var/tmp/portage/gcc-4.1.1/work/gcc-4.1.1/gcc -I/var/tmp/portage/gcc-4.1.1/work/gcc-4.1.1/gcc/build -I/var/tmp/portage/gcc-4.1.1/work/gcc-4.1.1/gcc/../include -I/var/tmp/portage/gcc-4.1.1/work/gcc-4.1.1/gcc/../libcpp/include -o build/errors.o /var/tmp/portage/gcc-4.1.1/work/gcc-4.1.1/gcc/errors.c
stage1/xgcc -Bstage1/ -B/usr/i686-pc-linux-gnu/bin/ -march=pentium4 -O2 -pipe -fstack-protector -fprofile-generate -DIN_GCC -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -pedantic -Wno-long-long -Wno-variadic-macros -Wold-style-definition -Wmissing-format-attribute -DHAVE_CONFIG_H -DGENERATOR_FILE -o build/genmodes \
build/genmodes.o build/errors.o ../build-i686-pc-linux-gnu/libiberty/libiberty.a
build/genmodes.o: En la función `make_vector_mode':
genmodes.c:(.text+0xc91): referencia a `__stack_chk_fail' sin definir
build/genmodes.o: En la función `make_complex_modes':
genmodes.c:(.text+0xf1a): referencia a `__stack_chk_fail' sin definir
build/genmodes.o: En la función `calc_wider_mode':
genmodes.c:(.text+0x113e): referencia a `__stack_chk_fail' sin definir
build/genmodes.o: En la función `make_vector_modes':
genmodes.c:(.text+0x1992): referencia a `__stack_chk_fail' sin definir
stage1/libgcov.a(_gcov.o): En la función `gcov_exit':
/var/tmp/portage/gcc-4.1.1/work/gcc-4.1.1/gcc/libgcov.c:532: referencia a `__stack_chk_fail_local' sin definir
collect2: ld returned 1 exit status
make[2]: *** [build/genmodes] Error 1
make[2]: Leaving directory `/var/tmp/portage/gcc-4.1.1/work/build/gcc'
make[1]: *** [stageprofile_build] Error 2
make[1]: Leaving directory `/var/tmp/portage/gcc-4.1.1/work/build/gcc'
make: *** [profiledbootstrap] Error 2

!!! ERROR: sys-devel/gcc-4.1.1 failed.
Call stack:
ebuild.sh, line 1539: Called dyn_compile
ebuild.sh, line 939: Called src_compile
ebuild.sh, line 1248: Called toolchain_src_compile
toolchain.eclass, line 24: Called gcc_src_compile
toolchain.eclass, line 1528: Called gcc_do_make
toolchain.eclass, line 1402: Called die


Y no he encontrado como solucionarlo. Quizá tenga fácil solución, pero hoy no es un día en el que esté especialmente lúcido.

A ver si alguien me puede echar una mano. La versión de gcc que utilizo actualmente es la 3.3.6 e intento pasar a la 4.1.1. Las CFLAGS="-march=pentium4 -O2 -pipe -fomit-frame-pointer -fstack-protector" (poco agresivas diría yo).

Saludos y gracias de antemano :-)


PD: Cagada en el título, obviamente es gcc-4.1.1
¿No tienes un gcc más nuevo? Pon tu emerge --info por favor

- ferdy
Pues... tengo por ahí un 3.4.5, pero como voy aprendiendo poco a poco cómo funciona gentoo (diría que muy poco a poco) pues ni siquiera sabía de la necesidad de hacer tantas cosillas al actualizar gcc y demás, como las que se comentan en el enlace del primer post.

Y como al hacer gcc --verson me decía que 3.3.6 y siempre que aparece gcc en algún mensaje me pone esa versión, pues he imaginado que debía seguir la guía con los pasos de 3.3.6 a 4.1.1

Pero bueno que me enrollo mucho [ayay] adjunto en un fichero la salida del emerge --info que es un buen tocho.

Gracias


PD: si ves algo extraño en el emerge --info puedes decirlo :-P
PD2: tampoco es tan tocho, lo pego pues:

Gentoo Base System version 1.6.14
Portage 2.1-r1 (default-linux/x86/2006.1, gcc-3.3.6, glibc-2.3.5-r2, 2.6.12-gentoo-r10 i686)
=================================================================
System uname: 2.6.12-gentoo-r10 i686 Intel(R) Pentium(R) 4 CPU 2.80GHz
app-admin/eselect-compiler: [Not Present]
dev-lang/python: 2.3.5-r2, 2.4.2
dev-python/pycrypto: 2.0.1-r5
dev-util/ccache: [Not Present]
dev-util/confcache: [Not Present]
sys-apps/sandbox: 1.2.12
sys-devel/autoconf: 2.13, 2.59-r6
sys-devel/automake: 1.4_p6, 1.5, 1.6.3, 1.7.9-r1, 1.8.5-r3, 1.9.6-r1
sys-devel/binutils: 2.16.1-r3
sys-devel/gcc-config: 1.3.13-r3
sys-devel/libtool: 1.5.22
virtual/os-headers: 2.6.11-r2
ACCEPT_KEYWORDS="x86"
AUTOCLEAN="yes"
CBUILD="i686-pc-linux-gnu"
CFLAGS="-march=pentium4 -O2 -pipe -fomit-frame-pointer -fstack-protector"
CHOST="i686-pc-linux-gnu"
CONFIG_PROTECT="/etc /usr/kde/3.5/env /usr/kde/3.5/share/config /usr/kde/3.5/shutdown /usr/lib/X11/xkb /usr/ share/config"
CONFIG_PROTECT_MASK="/etc/env.d /etc/gconf /etc/terminfo /etc/texmf/web2c"
CXXFLAGS="-march=pentium4 -O2 -pipe -fomit-frame-pointer -fstack-protector"
DISTDIR="/usr/portage/distfiles"
FEATURES="autoconfig distlocks metadata-transfer sandbox sfperms strict"
GENTOO_MIRRORS="http://distfiles.gentoo.org http://distro.ibiblio.org/pub/linux/distributions/gentoo"
LANG="es_ES@euro"
LC_ALL="es_ES@euro"
LDFLAGS="-Wl,-O1 -Wl,--enable-new-dtags -Wl,--sort-common -s"
LINGUAS="es"
MAKEOPTS="-j2"
PKGDIR="/usr/portage/packages"
PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --compress --force --whole-file -- delete --delete-after --stats --timeout=180 --exclude='/distfiles' --exclude='/local' --exclude='/packages'"
PORTAGE_TMPDIR="/var/tmp"
PORTDIR="/usr/portage"
PORTDIR_OVERLAY="/usr/local/portage"
SYNC="rsync://rsync.es.gentoo.org/gentoo-portage"

Adjuntos

Oh oh... uh oh.... quita esas LDFLAGS. Que hacen llorar al niño jesús :)

- ferdy
Bueno, pues he comentado la línea de las LDFLAGS ( Dios me libre de hacer llorar al niño Jesús ;) ), y he vuelto a probar con emerge -u gcc obteniendo el mismo error. Entre los "mensajes" de la compilación aparece esto:

mv *.o s-* xgcc cpp cc1 cc1*-dummy crtbegin.o crtbeginS.o crtbeginT.o crtend.o crtendS.o crtfastmath.o gcc-cross protoize unprotoize specs collect2 gcov-iov gcov gcov-dump *.[0-9][0-9].* *.[si] *-checksum.c libbackend.a libgcc.mk g++ g++-cross cc1plus gfortran f951 stage1
mv: no se puede efectuar `stat' sobre «crtbegin.o»: No existe el fichero o el directorio
mv: no se puede efectuar `stat' sobre «crtbeginS.o»: No existe el fichero o el directorio
mv: no se puede efectuar `stat' sobre «crtbeginT.o»: No existe el fichero o el directorio
mv: no se puede efectuar `stat' sobre «crtend.o»: No existe el fichero o el directorio
mv: no se puede efectuar `stat' sobre «crtendS.o»: No existe el fichero o el directorio
mv: no se puede efectuar `stat' sobre «crtfastmath.o»: No existe el fichero o el directorio
mv: no se puede efectuar `stat' sobre «gcc-cross»: No existe el fichero o el directorio
mv: no se puede efectuar `stat' sobre «protoize»: No existe el fichero o el directorio
mv: no se puede efectuar `stat' sobre «unprotoize»: No existe el fichero o el directorio
mv: no se puede efectuar `stat' sobre «specs»: No existe el fichero o el directorio
mv: no se puede efectuar `stat' sobre «gcov-iov»: No existe el fichero o el directorio
mv: no se puede efectuar `stat' sobre «gcov»: No existe el fichero o el directorio
mv: no se puede efectuar `stat' sobre «gcov-dump»: No existe el fichero o el directorio
mv: no se puede efectuar `stat' sobre «*.[0-9][0-9].*»: No existe el fichero o el directorio
mv: no se puede efectuar `stat' sobre «*.[si]»: No existe el fichero o el directorio
mv: no se puede efectuar `stat' sobre «g++-cross»: No existe el fichero o el directorio
mv: no se puede efectuar `stat' sobre «cc1plus»: No existe el fichero o el directorio
mv: no se puede efectuar `stat' sobre «f951»: No existe el fichero o el directorio
make[2]: [stage1-start] Error 1 (no tiene efecto)
mv build/* stage1/build


y esto:

cp libgcc_s*.so stage1
cp libunwind.a libunwind*.so stage1
cp: no se puede efectuar `stat' sobre «libunwind.a»: No existe el fichero o el directorio
cp: no se puede efectuar `stat' sobre «libunwind*.so»: No existe el fichero o el directorio
make[2]: [stage1-start] Error 1 (no tiene efecto)
for f in .. ; do if [ x${f} != x.. ]; then \
cp stage1/${f} . ; \
else true; \
fi; done
mv cp/*.o stage1/cp
mv: no se puede efectuar `stat' sobre «cp/*.o»: No existe el fichero o el directorio
make[2]: [c++.stage1] Error 1 (no tiene efecto)
mv fortran/*.o stage1/fortran
mv: no se puede efectuar `stat' sobre «fortran/*.o»: No existe el fichero o el directorio
make[2]: [fortran.stage1] Error 1 (no tiene efecto)
for dir in . cp fortran build ; \
do \
rm -f $dir/*.{gcda,gcno} ; \
done


no sé si tendrá algo que ver.
gcc-config -l


Intenta seleccionar uno más nuevo. Tienes versiones muy antiguas de gcc y glibc... intuyo que tendrás que ir poco a poco. Pero no hace falta que recompiles todo entre cada actualización, solo en la última.

- ferdy
Imagino que te refieres a pasar de 3.3.6 a 3.4.5 con esto y luego del 3.4.5 al 4.1.1 con esto, no?

Gracias de nuevo ;)

Ya te contaré como ha ido si acabo a tiempo xD

Edito:

Pasando del 3.3.6 al 3.4.5, en el revdep-rebuild obtengo:

Checking dynamic linking consistency...
broken /usr/lib/azureus/libswt-gnome-gtk-3106.so (requires libbonobo-2.so.0 l
ibbonobo-activation.so.4 libbonoboui-2.so.0 libgnome-2.so.0 libgnomecanvas-2.so.
0 libgnomeui-2.so.0 libgnomevfs-2.so.0)
broken /usr/lib/azureus/libswt-mozilla-gtk-3106.so (requires libxpcom.so)
broken /usr/lib/libkmfcore.la (requires /usr/kde/3.4/lib/libkparts.la)
broken /usr/lib/libkmfcore.la (requires /usr/kde/3.4/lib/libkio.la)
broken /usr/lib/libkmfcore.la (requires /usr/kde/3.4/lib/libkdesu.la)
broken /usr/lib/libkmfcore.la (requires /usr/kde/3.4/lib/libkwalletclient.la)
broken /usr/lib/libkmfcore.la (requires /usr/kde/3.4/lib/libkdeui.la)
broken /usr/lib/libkmfcore.la (requires /usr/kde/3.4/lib/libkdecore.la)
broken /usr/lib/libkmfcore.la (requires /usr/kde/3.4/lib/libDCOP.la)
broken /usr/lib/libkmfcore.la (requires /usr/kde/3.4/lib/libkdefx.la)
broken /usr/lib/libkmfipteditor.la (requires /usr/kde/3.4/lib/libkparts.la)
broken /usr/lib/libkmfipteditor.la (requires /usr/kde/3.4/lib/libkio.la)
broken /usr/lib/libkmfipteditor.la (requires /usr/kde/3.4/lib/libkdesu.la)
broken /usr/lib/libkmfipteditor.la (requires /usr/kde/3.4/lib/libkwalletclient
.la)
broken /usr/lib/libkmfipteditor.la (requires /usr/kde/3.4/lib/libkdeui.la)
broken /usr/lib/libkmfipteditor.la (requires /usr/kde/3.4/lib/libkdecore.la)
broken /usr/lib/libkmfipteditor.la (requires /usr/kde/3.4/lib/libDCOP.la)
broken /usr/lib/libkmfipteditor.la (requires /usr/kde/3.4/lib/libkdefx.la)


Los de azureus no me importan, ya no lo uso, lo desinstalaré. Pero el resto no sé si pueden ser problemáticos, instalé kde3.5, creo que estaba "masked".

Aunque cuando empieza el "rebuild" solo me emerge el azureus.

Reedito: Ya me he cargado el azureus y ahora me siguen saliendo los otros "broken", pero me dice:

Dynamic linking on your system is consistent... All done.


Así que sigo con la guía :)
Lo que te dice es que actualices al 3.4.5, como has hecho, y ahora, sin necesidad de actualizar todo (ya sea reemergiendo o con revdep-rebuild), pruebes a actualizar a gcc-4.1, ya recompilarás entonces.

Un saludo.
Borro y edito para que suba, maldita norma de los co*ones

Bueno pues, sigo con problemas :(

He hecho:

# emerge -an gentoolkit
(Please substitute "i686-pc-linux-gnu-3.4.5" with the GCC
version and CHOST settings you've upgraded to: )
# gcc-config i686-pc-linux-gnu-3.4.5
# source /etc/profile

(Rebuilding libtool)
# emerge --oneshot -av libtool

# revdep-rebuild (de regalo)
# emerge --oneshot sys-libs/libstdc++-v3

para pasar al 3.4.5. No me he atrevido con:

# emerge -aC =sys-devel/gcc-3.3*

[ayay]


y he pasado a

# emerge -uav gcc

para instalar el 4.1.1, pero sigo con el mismo error, aunque ayer no pegué esto que sale al final:

!!! emake failed with profiledbootstrap
!!! If you need support, post the topmost build error, and the call stack if relevant.


Quizá esa línea del profiledbootstrap de alguna pista [agggtt]


Gracias a ambos ;)


Edito: He probado a emerger primero las glibc 2.4 por si podía venir de ahí el problema y he obtenido el siguiente error:

...
a - elf/framestate.os
a - elf/unwind-pe.os
: /var/tmp/portage/glibc-2.4-r3/work/build-default-i686-pc-linux-gnu-nptl/libc_pic.a
i686-pc-linux-gnu-gcc -nostdlib -nostartfiles -r -o /var/tmp/portage/glibc-2.4-r3/work/build-default-i686-pc-linux-gnu-nptl/elf/librtld.map.o '-Wl,-(' /var/tmp/portage/glibc-2.4-r3/work/build-default-i686-pc-linux-gnu-nptl/elf/dl-allobjs.os /var/tmp/portage/glibc-2.4-r3/work/build-default-i686-pc-linux-gnu-nptl/libc_pic.a -lgcc '-Wl,-)' -Wl,-Map,/var/tmp/portage/glibc-2.4-r3/work/build-default-i686-pc-linux-gnu-nptl/elf/librtld.mapT
/var/tmp/portage/glibc-2.4-r3/work/build-default-i686-pc-linux-gnu-nptl/libc_pic.a(init-first.os):(.data+0x0): definiciones múltiples de `__libc_multiple_libcs'
/var/tmp/portage/glibc-2.4-r3/work/build-default-i686-pc-linux-gnu-nptl/elf/dl-allobjs.os:(.bss+0x80): primero se definió aquí
/var/tmp/portage/glibc-2.4-r3/work/build-default-i686-pc-linux-gnu-nptl/libc_pic.a(_itoa.os): En la función `_itoa':
_itoa.c:(.text+0xdb): definiciones múltiples de `_itoa'
/var/tmp/portage/glibc-2.4-r3/work/build-default-i686-pc-linux-gnu-nptl/elf/dl-allobjs.os:: primero se definió aquí
/usr/lib/gcc/i686-pc-linux-gnu/3.4.5/../../../../i686-pc-linux-gnu/bin/ld: Warning: size of symbol `_itoa' changed from 232 in /var/tmp/portage/glibc-2.4-r3/work/build-default-i686-pc-linux-gnu-nptl/elf/dl-allobjs.os to 589 in /var/tmp/portage/glibc-2.4-r3/work/build-default-i686-pc-linux-gnu-nptl/libc_pic.a(_itoa.os)
collect2: ld devolvió el estado de salida 1
make[2]: *** [/var/tmp/portage/glibc-2.4-r3/work/build-default-i686-pc-linux-gnu-nptl/elf/librtld.map] Error 1
make[2]: Leaving directory `/var/tmp/portage/glibc-2.4-r3/work/glibc-2.4/elf'
make[1]: *** [elf/subdir_lib] Error 2
make[1]: Leaving directory `/var/tmp/portage/glibc-2.4-r3/work/glibc-2.4'
make: *** [all] Error 2

!!! ERROR: sys-libs/glibc-2.4-r3 failed.
Call stack:
ebuild.sh, line 1539: Called dyn_compile
ebuild.sh, line 939: Called src_compile
glibc-2.4-r3.ebuild, line 1179: Called toolchain-glibc_src_compile
glibc-2.4-r3.ebuild, line 253: Called die


Por lo que he recordado que tengo activada una USE que no sé porque la puse y alguna vez ya me ha extrañado verla ahí: PIC. Total que me voy a ver qué es y leo:

Build Position Independent Code. Do not utilize this flag unless you know what you're doing.


Seré imbécil!!

En fin, seguiré probando.

Saludos

Reedito (esto parece un diario):
# equery hasuse PIC
[ Searching for USE flag PIC in all categories among: ]
* installed packages
#


Parece que no es grave, no?

buff, definitivamente soy imbécil
# equery hasuse pic
[ Searching for USE flag pic in all categories among: ]
* installed packages
[I--] [ ] sys-libs/glibc-2.3.5-r2 (2.2)
[I--] [ ] app-arch/gzip-1.3.5-r8 (0)
[I--] [ ] media-libs/libsdl-1.2.8-r1 (0)
#


y si las recompilo?
Respondo por petición de NeoRave. Venga, ya puedes poner la solución :)
Gracias ;)

Bueno pues resulta que es un problema con las CFLAGS. He podido pasar al gcc-3.4.5 y las glibc-2.3.6-r4 sin problemas. Pero para compilar gcc-4.1.1 he tenido que quitar la flag fstack-protector. He llegado a esta solución a partir de este mensaje en los foros de gentoo, que me ha llevado a este bug report.

No me he informado a fondo, pero básicamente lo que sucede es que peta con dicha flag. Además parece ser que está incluida en la USE hardened y al compilar gcc me he dado cuenta de que decía que esta USE no estaba soportada para esa versión de gcc y esa arquitectura (gcc-4.1.1 y x86). ¿Se podrá quitar esa flag y dejar la USE hardened y santas pascuas?

Ahora bien, solo he compilado gcc-4.1.1, me quedan aún las glibc-2.4, pero lo dejo para otro día. Imagino que ya no tendré problemas.

Si alguien quiere añadir algo más (*cof* Ferdy *cof*) adelante y sino ahí queda eso.


Saludos
Sospechaba del flag... pero no sabía hasta qué punto la soportábamos o no... me alegro de que se solucionara :)

Sobre tu pregunta sobre la USE hardened... por más que la leo... no la entiendo :/

- ferdy
Ferdy escribió:Sospechaba del flag... pero no sabía hasta qué punto la soportábamos o no... me alegro de que se solucionara :)

Sobre tu pregunta sobre la USE hardened... por más que la leo... no la entiendo :/

- ferdy


Gracias. He intentado buscar más info sobre esta USE pero no me ha quedado nada claro [agggtt] Como mucho podría aportar una especie de brainstorming de ideas que relaciono con dicha USE tras leer un buen rato: pie, ssp, gcc, toolchain...

En fin, cuántas cosas por aprender. Gracias de nuevo por la ayuda :)

Saludos
Si te sirve de 'rule of thumb', no necesitas USE=hardened en una workstation.

- ferdy
Gracias, lo tendré en cuenta. Cuando vuelva a estar por casa seguiré con la actualización a ver qué tal.

Saludos
14 respuestas