Pergunta

Eu estava tentando compilar um programa usando uma coreset.o externo objeto compilado. Eu escrevi o arquivo de teste public01.c e minhas funções estão em computation.c, tanto de que compila. No entanto a sua falha em ligar-lo juntos. O que poderia ser o 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
Foi útil?

Solução

Eu acho que coreset.o foi compilado para 64 bits, e você está ligando-o com um 32-bit computation.o.

Você pode tentar computation.c recompilação com a bandeira '-m64' da gcc (1)

Outras dicas

Você pode especificar '-m32' ou '-m64' para selecionar o modo de compilação.

Ao lidar com autoconf scripts (Configurar), eu costumo conjunto CC = "gcc -m64" (ou CC = "gcc -m32") no ambiente para que tudo é compilado com o bittiness correta. Pelo menos, normalmente ... as pessoas encontrar infinitas maneiras de fazer isso não funciona muito bem, mas a minha média de acertos é muito alta (maneira mais de 95%) com ele.

Acontece que a versão do compilador que eu estava usando não corresponde a versão compilada feito com o coreset.o.

Um era de 32 bits a outra era de 64 bits. Vou deixar isso no caso de alguém corre para um problema semelhante.

Parece que o arquivo objeto foi compilado em um 64-bit conjunto de ferramentas, e você estiver usando um conjunto de ferramentas de 32 bits. Você tentou recompilar o arquivo objeto no modo de 32 bits?

sudo apt-get install ia32-libs 
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top