configure: errore: il compilatore C non può creare file eseguibili


15

Stavo cercando di installare rvm utilizzando \curl -L https://get.rvm.io | bash -s stable --ruby --autolibs=enable --auto-dotfiles. Ha funzionato bene fino a quando ho ricevuto un errore di configurazione:

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.

Di seguito sono riportati i contenuti del file di registro menzionato:

[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

Ho quindi provato un programma C "ciao mondo" e ho ottenuto il seguente errore durante la compilazione:

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

Non sono sicuro del motivo per cui viene generato questo errore. Non sono riuscito a trovare una risposta soddisfacente a questo sul forum. Qualcuno potrebbe aiutare per favore. Grazie


1
Ho ricevuto questo errore quando ho erroneamente specificato CXXFLAGS per CPPFLAGS durante l'esecuzione dello script './configure'. Quindi il messaggio di errore non spiega l'errore esatto.
RajaRaviVarma,

Risposte:


12

Sembra che tu abbia una versione non standard del linker GNU ldnella tua /usr/local/bindirectory (possibilmente installata dal sorgente) e che la tua variabile d'ambiente PATH sia impostata in modo tale che il sistema trovi quella versione prima della versione 'system' (che dovrebbe essere in /usr/bin/ld) . Se si desidera compilare utilizzando le versioni di sistema standard degli strumenti di compilazione , sarà necessario regolare la variabile di ambiente PATH in modo che esegua ricerche /usr/binprima di/usr/local/bin

Se vuoi correggere permanentemente la tua variabile PATH, dovrai scoprire dove l'hai impostata originariamente - probabilmente nel tuo file ~ / .bashrc, ma sono possibili altre posizioni. In alternativa, se hai solo bisogno di una correzione temporanea per questa build, puoi provare

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

nel terminale prima di eseguire il ./configure

Tuttavia, a volte ci sono buoni motivi per cui tu (o il tuo amministratore di sistema) potresti voler utilizzare le versioni degli strumenti da /usr/local- in tal caso, dovrai scoprire perché ldapparentemente non è compatibile con il resto della catena di build e risolvere esso - se si tratta di un sistema scolastico o di lavoro, contattare l'amministratore di sistema o il reparto IT.


9
Normalmente /usr/local/binè più avanti di /usr/binin PATHper una buona ragione: non c'è alcun senso avere un programma installato in locale se la versione della distribuzione ha la precedenza. Ottimo lavoro per individuare il problema, ma la risoluzione consigliata non è quella di cambiare il PERCORSO ma di rimuovere o riparare quello rotto /usr/local/bin/ld.
Gilles 'SO- smetti di essere malvagio' il

@steeldriver: Se non fosse presente in ~ / .bashrc, potrei semplicemente copiare e incollare la riga "export PATH =" / usr / bin: $ PATH "" lì. O creerebbe un problema per altri programmi?
naka,

@Gilles Ho modificato la mia risposta per riflettere il tuo commento @naka Sconsiglio che a lungo termine causerà più confusione: dovresti prendere nota del commento di Gilles e scoprire perché il tuo amministratore ha impostato il PERCORSO per usare il versione in/usr/local
steeldriver

3
Ho avuto lo stesso errore ... questo non ha funzionato per me ... which ldritorna solo /usr/bin/ld...
isomorfismi

9

Contrariamente alle complicate ragioni di cui sopra, nel mio caso, era semplicemente un caso di non g++installazione. Stranamente, il messaggio di errore era lo stesso descritto dall'OP, ad es

configure: error: C compiler cannot create executables

Comunque, ho risolto questo installando g ++:

sudo apt-get install g++

0

Prova ad aggiornare il sistema, reinstalla i pacchetti che forniscono ld e il compilatore ( gcc ). Corri prelink -au && depmod -a. Quindi riavviare.

Potrebbe essere necessario disabilitare o riconfigurare prelink all'interno /etc/systemctlo ovunque le distro lo configurino.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.