¿Cómo puedo construir un gcc anterior (específicamente, 4.5.2) en Ubuntu 11.10 y evitar errores sobre "/ usr / bin / ld: no se puede encontrar crti.o: No existe tal archivo o directorio"?
Investigué un poco y encontré varios artículos similares, pero ninguno que realmente resuelva mi problema:
- Verifiqué que todos mis paquetes (libc6-dev y similares) se reinstalan según esta pregunta
- He verificado que crti.o existe en / usr / lib32 y / usr / lib / x86_64-linux-gnu, y que mi ld.so.conf está configurado para buscar en esos directorios
- Verifiqué que anteponer mi invocación de make con LIBRARY_PATH = / usr / lib / x86_64-linux-gnu funciona, pero me gustaría evitar esto (se convierte en un punto divergente en los makefiles)
- He intentado varias cosas con --with-build-sysroot, pero sin éxito (léase: tal vez simplemente no conozco la bandera correcta para configurar)
Cuando se ejecuta con strace (según esta respuesta ), puedo ver la referencia desnuda a crti.o:
13240 abierto ("crti.o", O_RDONLY) = -1 ENOENT (No existe tal archivo o directorio)
¡Gracias!
Incluso las versiones muy nuevas de GCC fallan con ese mensaje. Esto se debe a que las nuevas versiones de Debian / Ubuntu (admitirán) multiarch (es decir, instalar binarios para varias máquinas en un solo sistema de archivos), por lo que las bibliotecas se han alejado de los lugares estándar.
Hay parches de GCC para arreglarlo aquí (aún no se aprobaron las versiones finales, pero son correctas para Ubuntu), y probablemente se apliquen a GCC anteriores sin mucho esfuerzo, tal vez. Creo que necesita configurar GCC con --enable-multiarch , o algo así.
Mientras tanto, crear enlaces suaves es una buena solución:
(el nombre de la carpeta será diferente en las instalaciones de 32 bits).
Espero que ayude.
fuente
Resolví este problema con un par de soluciones que podrían serle útiles.
Primero, cree GCC con
LIBRARY_PATH=/usr/lib/x86_64-linux-gnu
, para que el proceso de arranque de compilación sepa dónde encontrar loscrt?.o
archivos de inicio.Luego, en lugar de crear
crt?.o
enlaces simbólicos en los/usr/lib
que afectan a todo el sistema, puede vincular esos tres archivos en el${prefix}/lib/gcc/...
directorio correspondiente al${prefix}/bin
directorio en el quegcc
está instalado el ejecutable. En realidad, está casi en la parte superior de su ruta de búsqueda para los archivos de inicio, por lo que los encontrará, pero no afectan a nada más.En mi caso, el directorio específico para colocarlos fue
lib/gcc/x86_64-unknown-linux-gnu/4.3.2/
; puedes encontrar el correcto porque ya tiene otros archivos comocrtbegin.o
en él.fuente
Construí GCC 4.1.2 en Ubuntu precisa x86_64. Como lo hizo, eché un vistazo a la secuencia del último comando "xgcc" en busca de tiempo de ejecución de 32 bits c, grep-ped / 32 / de la siguiente manera. El tiempo de ejecución de C en el mío está en / usr / lib32 que es proporcionado por el paquete libc6-dev-i386.
Entonces, creé los enlaces simbólicos crt? .O en el directorio xgcc buscado.
Construí con éxito GCC 4.1.2 con él.
fuente