#1 Le 05/11/2013, à 21:01
- santosha
[RESOLU] Erreur de Compilation collect2: ld terminée par le signal 11
Bonjour,
Comme l'indique l'intitulé j'ai une erreur de lors de la compilation.
En fait j'ai un projet à réaliser où je dois utiliser la bibliothèque libfastsim.so
Cependant au début je ne savais pas où la placer, donc d'après mes souvenirs (pas très fiable), je l'ai copier en tapant dans le terminal quelque chose comme :
sudo cp libfastsim.so /home/usr/bin/ld
(mais je pense pas que c'est fait grand chose car ld n'est pas un dossier et je trouve pas libfastsim.so dans /home/usr/bin). Cette commande ne m'a affiché aucunes erreurs.
Ensuite j'ai tapé dans le terminal:
export LD_LIBRARY_PATH=/home/usr/bin/ld:$LD_LIBRARY_PATH
Et depuis quelque soit le fichier .c que je compile j'ai tout le temps la même erreur :
collect2: erreur: ld terminé par le signal 11 [Erreur de segmentation], core dumped
Au début je pensais que c'était un problème d'édition des liens avec la bibliothèque libfastsim mais même des codes très simples ne compilent plus. Est ce parce que j'ai touché au fichier usr/bin ? Ou à cause du export ?
Merci d'avance pour votre aide.
Dernière modification par santosha (Le 06/11/2013, à 21:23)
Hors ligne
#2 Le 05/11/2013, à 22:16
- darunia_goron
Re : [RESOLU] Erreur de Compilation collect2: ld terminée par le signal 11
Le programme ld fait une erreur de segmentation (signal 11).
Ta commande n'était t'elle pas plutôt :
sudo cp libfastsim.so /usr/bin/ld
(sans le /home au début) ?
Au quel cas, tu as écrasé le logiciel ld (l'éditeur de lien) qui est nécessaire pour transformer tes .o en un programme. Autrement dit, tu as tué ton environnement de compilation en écrasant ld avec un fichier qui n'a rien à voir.
Premièrement, réinstalle ld.
Dernière modification par darunia_goron (Le 05/11/2013, à 22:18)
Hors ligne
#3 Le 06/11/2013, à 20:20
- santosha
Re : [RESOLU] Erreur de Compilation collect2: ld terminée par le signal 11
Tu as raison je l'ai réinstallé et ça remarche !!!
Je pense qu'à l'avenir j'éviterai de toucher à ces répertoires...
Pour ceux qui liraient ce post, j'ai réinstallé grace au package binutils :
sudo apt-get install --reinstall binutils
Encore une fois vous me sauvez.
Merci beaucoup !!
Dernière modification par santosha (Le 07/11/2013, à 03:20)
Hors ligne
#4 Le 06/11/2013, à 20:59
- darunia_goron
Re : [RESOLU] Erreur de Compilation collect2: ld terminée par le signal 11
Content que ce soit résolu.
Pour en revenir à ton problème, ta première erreur est une mauvaise utilisation de cp :
cp toto /dossier/sous-dossier/
crée une copie de toto dans le sous dossier sous-dossier.
cp toto /dossier/sous-dossier/fichier
écrase fichier avec une copie de toto.
Pour les bibliothèques partagées, tu as peut-être envie de l'installer localement. Au quel cas, au moment de l'édition des liens, tu peux rajouter des dossiers contenant des bibliothèques grâce à -L.
Par exemple :
$ gcc -c -o toto.o toto.c
$ gcc -c -o tata.o tata.c
$ gcc -o mon_programme toto.o tata.o -L chemin_vers_ma_bibliothèque -l nom_de_ma_bibliothèque
Lors de l'exécution, tu devras en revanche bien veiller à ce que la variable d'environnement LD_LIBRARY_PATH contienne le dossier chemin_vers_ma_bibliothèque.
Dernière modification par darunia_goron (Le 06/11/2013, à 22:12)
Hors ligne
#5 Le 06/11/2013, à 21:22
- santosha
Re : [RESOLU] Erreur de Compilation collect2: ld terminée par le signal 11
Et pour que LD_LIBRARY_PATH contienne le bon chemin il faut faire un export (en supposant que libfastsim.so de trouve dans /home/usr/moi/Documents
export LD_LIBRARY_PATH=/home/usr/moi/Documents:$LD_LIBRARY_PATH
Mais je dois le retaper à chaque fois que je compile ? N'y a t-il pas un moyen de le mettre dans le Makefile ?
Dernière modification par santosha (Le 06/11/2013, à 21:23)
Hors ligne
#6 Le 06/11/2013, à 22:26
- darunia_goron
Re : [RESOLU] Erreur de Compilation collect2: ld terminée par le signal 11
Tu peux éventuellement faire une target run dans ton Makefile :
MON_PROGRAMME := nom_du_programme
DOSSIER_DE_MA_BIBLIOTHÈQUE := chemin_vers_ma_bibliothèque
$(MON_PROGRAMME): $(MON_PROGRAMME).o
…
$(MON_PROGRAMME).o: $(MON_PROGRAMME).c
…
run:
LD_LIBRARY_PATH=$(DOSSIER_DE_MA_BIBLIOTHÈQUE):$(LD_LIBRARY_PATH) ./$(MON_PROGRAMME)
Sinon, l'autre solution classique est d'inclure ton export dans ~/.bashrc.
Hors ligne