configure: erreur: le compilateur C ne peut pas créer d'exécutables

15

J'essayais d'installer rvm en utilisant \curl -L https://get.rvm.io | bash -s stable --ruby --autolibs=enable --auto-dotfiles. Cela a bien fonctionné jusqu'à ce que j'obtienne une erreur de configuration:

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.

Voici le contenu du fichier journal mentionné:

[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

J'ai ensuite essayé un programme C "hello world" et j'ai obtenu l'erreur suivante lors de la compilation:

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

Je ne sais pas pourquoi cette erreur est levée. Je n'ai pas trouvé de réponse satisfaisante à cela sur le forum. Quelqu'un pourrait-il m'aider? Merci

naka
la source
1
J'ai obtenu cette erreur lorsque j'ai spécifié par erreur CXXFLAGS pour CPPFLAGS lors de l'exécution du script './configure'. Le message d'erreur n'explique donc pas l'erreur exacte.
RajaRaviVarma

Réponses:

12

Il semble que vous ayez une version non standard de l'éditeur ldde liens GNU dans votre /usr/local/binrépertoire (éventuellement installé à partir de la source), et votre variable d'environnement PATH est définie de telle sorte que le système trouve cette version avant la version 'système' (qui devrait être à /usr/bin/ld) . Si vous souhaitez créer à l'aide des versions système standard des outils de génération , vous devrez ajuster votre variable d'environnement PATH afin qu'elle effectue une recherche /usr/binavant/usr/local/bin

Si vous souhaitez corriger définitivement votre variable PATH, vous devrez savoir où vous l'avez définie à l'origine - probablement dans votre fichier ~ / .bashrc, mais d'autres emplacements sont possibles. Alternativement, si vous avez juste besoin d'un correctif temporaire pour cette version, vous pouvez essayer

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

dans le terminal avant d'exécuter le ./configure

Cependant, il y a parfois de bonnes raisons pour lesquelles vous (ou votre administrateur système) souhaitez que vous utilisiez des versions d'outils de /usr/local- si tel est le cas, alors vous devrez découvrir pourquoi ldil n'y a apparemment pas de compatibilité avec le reste de la chaîne de construction et corriger - s'il s'agit d'un système professionnel ou scolaire, contactez votre administrateur système ou le service informatique.

tournevis
la source
9
Normalement , /usr/local/binest en avance sur /usr/binen PATHpour une bonne raison: il n'y a pas de point d'avoir un programme installé localement si la version de la distribution a la priorité. Bon travail pour repérer le problème, mais la résolution recommandée n'est pas de changer le CHEMIN mais de supprimer ou de réparer ce cassé /usr/local/bin/ld.
Gilles 'SO- arrête d'être méchant'
@steeldriver: Si ce n'est pas le cas dans ~ / .bashrc, puis-je simplement copier-coller la ligne "export PATH =" / usr / bin: $ PATH "" là-bas. Ou cela créerait-il un problème pour d'autres programmes?
naka
@Gilles J'ai modifié ma réponse pour refléter votre commentaire @naka Je déconseille cela, cela causera plus de confusion à long terme - vous devriez prendre note du commentaire de Gilles et découvrir pourquoi votre administrateur a configuré le PATH pour utiliser le version in/usr/local
steeldriver
3
J'ai eu la même erreur… cela n'a pas fonctionné pour moi… which ldrevient seulement /usr/bin/ld….
isomorphismes
9

Contrairement aux raisons compliquées évoquées ci-dessus, dans mon cas, il s'agissait simplement de ne pas avoir g++installé. Curieusement, le message d'erreur était le même que celui décrit par l'OP, c'est-à-dire

configure: error: C compiler cannot create executables

Quoi qu'il en soit, j'ai résolu cela en installant g ++:

sudo apt-get install g++
rahul1210
la source
0

Essayez de mettre à jour le système, réinstallez les packages fournissant ld et le compilateur ( gcc ). Courez prelink -au && depmod -a. Redémarrez ensuite.

Vous devrez peut-être désactiver ou reconfigurer le lien préalable dans /etc/systemctlou à l'endroit où vos distributions le configurent.

user599717
la source