configure: error: el compilador de C no puede crear ejecutables

15

Estaba tratando de instalar rvm usando \curl -L https://get.rvm.io | bash -s stable --ruby --autolibs=enable --auto-dotfiles. Funcionó bien hasta que recibí un error de configuración:

Error running './configure --prefix=/home/nishant/.rvm/rubies/ruby-2.0.0-p247 --disable-install-doc --enable-shared',
please read /home/nishant/.rvm/log/1379591052_ruby-2.0.0-p247/configure.log
There has been an error while running configure. Halting the installation.

Los siguientes son los contenidos del archivo de registro mencionado:

[2013-09-19 17:15:58] ./configure
current path: /home/nishant/.rvm/src/ruby-2.0.0-p247
command(4): ./configure --prefix=/home/nishant/.rvm/rubies/ruby-2.0.0-p247 --disable-install-doc --enable-shared
checking build system type... i686-pc-linux-gnu
checking host system type... i686-pc-linux-gnu
checking target system type... i686-pc-linux-gnu
checking for gcc... gcc
checking whether the C compiler works... no
configure: error: in `/home/nishant/.rvm/src/ruby-2.0.0-p247':
configure: error: C compiler cannot create executables
See `config.log' for more details

Luego probé un programa C "hello world" y obtuve el siguiente error en la compilación:

nishant@nishant-Inspiron-1545:~$ gcc -g -o hello hello.c 
/usr/local/bin/ld: this linker was not configured to use sysroots
collect2: error: ld returned 1 exit status

No estoy seguro de por qué se produce este error. No pude encontrar una respuesta satisfactoria a esto en el foro. ¿Podría alguien ayudarme? Gracias

naka
fuente
1
Recibí este error cuando especifiqué por error CXXFLAGS para CPPFLAGS al ejecutar el script './configure'. Entonces el mensaje de error no explica el error exacto.
RajaRaviVarma

Respuestas:

12

Parece que tiene una versión no estándar del enlazador GNU lden su /usr/local/bindirectorio (posiblemente instalado desde la fuente), y su variable de entorno PATH está configurada de tal manera que el sistema encuentre esa versión antes que la versión 'sistema' (que debería estar en /usr/bin/ld) . Si desea compilar utilizando las versiones estándar del sistema de las herramientas de compilación , deberá ajustar la variable de entorno PATH para que busque /usr/binantes/usr/local/bin

Si desea arreglar permanentemente su variable PATH, deberá averiguar dónde la configuró originalmente, probablemente en su archivo ~ / .bashrc, pero es posible que haya otras ubicaciones. Alternativamente, si solo necesita una solución temporal para esta compilación, puede intentar

export PATH="/usr/bin:$PATH"

en la terminal antes de ejecutar el ./configure

Sin embargo, a veces hay buenas razones por las que usted (o el administrador de su sistema) puede querer que use versiones de herramientas /usr/local; si es así, deberá averiguar por qué ldaparentemente no es compatible con el resto de la cadena de compilación y corregir si es un sistema escolar o laboral, comuníquese con el administrador de su sistema o el departamento de TI.

conductor de acero
fuente
99
Normalmente /usr/local/binestá por delante de /usr/binen PATHpor una buena razón: no hay razón para tener un programa instalado localmente si la versión de la distribución tiene prioridad. Buen trabajo para detectar el problema, pero la resolución recomendada no es cambiar la RUTA, sino eliminarla o repararla /usr/local/bin/ld.
Gilles 'SO- deja de ser malvado'
@steeldriver: si no está allí en ~ / .bashrc, ¿podría copiar y pegar la línea "export PATH =" / usr / bin: $ PATH "" allí. ¿O crearía un problema para otros programas?
naka
@Gilles He editado mi respuesta para reflejar su comentario @naka No lo aconsejo, causará más confusión a largo plazo: debe tomar nota del comentario de Gilles y descubrir por qué su administrador ha configurado la RUTA para usar el versión en/usr/local
steeldriver
3
Recibí el mismo error ... esto no funcionó para mí ... which ldsolo devuelve /usr/bin/ld...
isomorfismos
9

Contrariamente a las complicadas razones dadas anteriormente, en mi caso, fue simplemente un caso de no haber g++instalado. Curiosamente, el mensaje de error fue el mismo descrito por el OP, es decir

configure: error: C compiler cannot create executables

De todos modos, resolví esto instalando g ++:

sudo apt-get install g++
rahul1210
fuente
0

Intente actualizar el sistema, reinstale los paquetes que proporcionan ld y el compilador ( gcc ). Ejecutar prelink -au && depmod -a. Luego reiniciar.

Es posible que deba deshabilitar o reconfigurar el preenlace en /etc/systemctlo donde su distribución lo configure.

usuario599717
fuente