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, son échec à le lier ensemble. 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
Je pense que coreset.o a été compilé pour 64 bits, et vous le liez avec un calcul 32 bits.
Vous pouvez essayer de recompiler computation.c avec l'indicateur '-m64' de gcc (1)
Vous pouvez spécifier '-m32' ou '-m64' pour sélectionner le mode de compilation.
Lorsque vous traitez 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 la bittiness correcte. Au moins, généralement ... les gens trouvent d'innombrables façons de faire en sorte que cela ne fonctionne pas tout à fait, mais ma moyenne au bâton est très élevée (bien plus de 95%).
Il s'avère que la version du compilateur que j'utilisais ne correspondait pas à la version compilée effectuée avec coreset.o.
L'un était de 32 bits et l'autre de 64 bits. Je laisse cela de côté au cas où quelqu'un d'autre rencontrerait un problème similaire.
Il semble que le fichier objet ait é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