Domanda

Stavo cercando di compilare un programma usando un oggetto compilato esterno coreset.o. Ho scritto il file di test public01.c e le mie funzioni sono in computation.c, entrambe compilate. Tuttavia non riesce a collegarlo insieme. Quale potrebbe essere il problema?

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
È stato utile?

Soluzione

Penso che coreset.o sia stato compilato per 64-bit e tu lo stia collegando con un computazione a 32-bit.

Puoi provare a ricompilare computation.c con il flag '-m64' di gcc (1)

Altri suggerimenti

È possibile specificare '-m32' o '-m64' per selezionare la modalità di compilazione.

Quando gestisco gli script autoconf (configura), di solito imposto CC = " gcc -m64 " (o CC = " gcc -m32 ") nell'ambiente in modo che tutto sia compilato con la correttezza corretta. Almeno, di solito ... la gente trova infiniti modi per far sì che questo non funzioni, ma la mia media in battuta è molto alta (ben oltre il 95%).

Si scopre che la versione del compilatore che stavo usando non corrispondeva alla versione compilata fatta con coreset.o.

Uno era a 32 bit e l'altro a 64 bit. Lascerò questo nel caso in cui qualcun altro incontri un problema simile.

Sembra che il file oggetto sia stato compilato su una toolchain a 64 bit e che tu stia utilizzando una toolchain a 32 bit. Hai provato a ricompilare il file oggetto in modalità 32 bit?

sudo apt-get install ia32-libs 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top