C / C ++ linker CALL16 reloc em xxxxx não contra símbolo global
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.
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ênciaO 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.