Pregunta

Estaba intentando compilar un programa utilizando un objeto externo compilado coreset.o. Escribí el archivo de prueba public01.c y mis funciones están en computation.c, ambas compiladas. Sin embargo, está fallando en unirlo. ¿Cuál podría ser el 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
¿Fue útil?

Solución

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

Puedes intentar compilar computation.c con el indicador '-m64' de gcc (1)

Otros consejos

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

Cuando se trata de scripts de autoconf (configurar), normalmente establezco CC = " gcc -m64 " (o CC = > gcc -m32 ") en el entorno para que todo se compile con el bittiness correcto. Al menos, por lo general ... la gente encuentra infinitas maneras de hacer que eso no funcione, pero mi promedio de bateo es muy alto (más del 95%).

Resulta que la versión del compilador que estaba usando no coincidía con la versión compilada hecha con coreset.o.

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

Parece que el archivo de objeto se compiló en una cadena de herramientas de 64 bits, y estás usando una cadena de herramientas de 32 bits. ¿Ha intentado recompilar el archivo de objeto en modo de 32 bits?

sudo apt-get install ia32-libs 
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top