Question

J'essayais de compiler un programme en utilisant un objet compilé externe coreset.o. J'ai écrit le fichier de test public01.c et mes fonctions sont dans computation.c, qui compile toutes les deux. Cependant, il échoue à le relier. Quel pourrait être le problème?

gcc -o public01.x public01.o computation.o coreset.o
ld: fatal: file coreset.o: wrong ELF class: ELFCLASS64
ld: fatal: File processing errors. No output written to public01.x
collect2: ld returned 1 exit status
Était-ce utile?

La solution

Je pense que coreset.o a été compilé pour 64 bits et vous le liez avec un calcul 32 bits.o.

Vous pouvez essayer de recompiler computation.c avec l'indicateur '-m64' de gcc (1)

Autres conseils

Vous pouvez spécifier '-m32' ou '-m64' pour sélectionner le mode de compilation.

Lorsque je traite avec des scripts autoconf (configure), je règle généralement CC = "gcc -m64". (ou CC = "gcc -m32") dans l’environnement afin que tout soit compilé avec le bon caractère. Du moins, d'habitude ... les gens trouvent d'innombrables moyens de faire en sorte que cela ne fonctionne pas tout à fait, mais ma moyenne au bâton est très élevée (elle dépasse 95%).

Il s'avère que la version du compilateur que j'utilisais ne correspond pas à la version compilée réalisée avec coreset.o.

L'un était de 32 bits l'autre était de 64 bits. Je laisse cela au cas où quelqu'un d'autre rencontrerait un problème similaire.

On dirait que le fichier objet a été compilé sur une chaîne d’outils 64 bits et que vous utilisez une chaîne d’outils 32 bits. Avez-vous essayé de recompiler le fichier objet en mode 32 bits?

sudo apt-get install ia32-libs 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top