Pergunta

Estou recebendo esses erros ao ligando, ambas as mensagens têm a ver com o mesmo arquivo objeto.

CALL16 reloc at 0x5f8 not against global symbol

e

could not read symbols: Bad value

A segunda mensagem parece ser a razão pela qual eu estou recebendo o erro CALL16, mas o arquivo compila apenas multa.

Todas as dicas sobre a fixação deste?

FYI, eu sou compilação cruzada para um alvo MIPS e usando gcc 4.1.2

EDIT: Sem sorte até agora:
Aqui estão os meus sinalizadores usados: -fPIC, -Wl, -rpath, -Wl, -O1

Eu também tentei o seguinte sem sucesso:
-mno explícito-relocs
-mexplicit-relocs
-mlong-chamadas
-mno-long-chamadas
-mxgot
-mno-xgot


Enquanto isso, eu vou voltar para a fonte, neste momento e investigar mais.

Foi útil?

Solução

Aha! Graças a um colega meu, encontramos a questão.

Aqui era a questão:

Houve uma frente declaração / protótipo de uma função.

void FooBarIsBest(void);

Mais tarde, no arquivo a função foi definida.

static void FooBarIsBest(void)
{
    // do the best
} 

O problema aqui foi que no protótipo a palavra-chave estática foi deixado de fora. Então era como uma função totalmente nova estava sendo definido.

referência

O CALL16 é usado pelo gcc para o código relocável. O código de montagem do arquivo mostrou que CALL16 estava sendo utilizado com esta função ... O que é errado, pois esta função é local.

Curiosamente, este código usado para compilar e ligar muito bem com uma versão mais antiga do GCC (3.2.2). Outra lessoned aprendido. :)

Outras dicas

Tente flag-chamadas -mlong para o compilador.

Também ver a manual do para mais opções MIPS específicas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top