2008-10-19 10 views
29

Estaba intentando compilar un programa utilizando un objeto compilado externo coreset.o. Escribí el archivo de prueba public01.c y mis funciones están en computation.c, que compila. Sin embargo, falla al vincularlo. ¿Cuál podría ser el problema?error de gcc: clase ELF incorrecta: ELFCLASS64

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 

Respuesta

33

Creo que coreset.o se compiló para 64 bits y lo está vinculando con un computation.o de 32 bits.

Usted puede tratar de volver a compilar computation.c con la bandera '-m64' de gcc(1)

3

Resulta que la versión del compilador que estaba usando no coincide con la versión compilada hecha con el coreset.o.

Uno era 32bit el otro era 64bit. Dejaré esto en caso de que alguien más se encuentre con un problema similar.

3

Parece que el archivo de objeto fue compilado en una cadena de herramientas de 64 bits, y está usando un conjunto de herramientas de 32 bits . ¿Has intentado volver a compilar el archivo objeto en modo de 32 bits?

6

Puede especificar '-m32' o '-m64' para seleccionar el modo de compilación.

Cuando se trata de scripts autoconf (configure), generalmente establezco CC = "gcc -m64" (o CC = "gcc -m32") en el entorno para que todo se compile con la bitritsa correcta. Al menos, por lo general ... las personas encuentran infinitas formas de hacer que no funcione, pero mi promedio de bateo es muy alto (más del 95%) con eso.

+0

Curioso: ¿por qué usar 'CC = gcc -m32' en lugar de' CFLAGS = -m32'? –

+1

Principalmente porque CFLAGS generalmente contiene _N_ otros indicadores importantes que no quiero borrar (incluir directorios, definir indicadores, opciones de optimización y advertencia, etc.). –

2
sudo apt-get install ia32-libs 
+0

Esta respuesta fue muy útil para un problema relacionado: al ejecutar un archivo ejecutable, puede obtener un mensaje casi idéntico y esta es la solución a ese problema. Entonces un +1 caritativo de mi parte. –

0

El paquete ia32-libs no está disponible, pero se lo refiere otro paquete. Esto puede significar que el paquete falta, está obsoleto o sólo está disponible de otra fuente Sin embargo, los siguientes paquetes reemplazarlo: lib32z1 lib32ncurses5

E: Paquete 'ia32-libs' no tiene candidato para su instalación

+0

Esto no es una respuesta. Si te encuentras con este mensaje de error, haz una nueva pregunta al respecto. – HighCommander4

Cuestiones relacionadas