Pregunta

Me estoy poniendo estos errores, mientras que unen, ambos mensajes tienen que ver con el mismo archivo objeto.

CALL16 reloc at 0x5f8 not against global symbol

y

could not read symbols: Bad value

El segundo mensaje parece ser la razón por la que estoy recibiendo el error CALL16, pero el archivo compila bien.

¿Algún consejo sobre la fijación de este?

Para su información, estoy compilación cruzada para un objetivo MIPS y el uso de gcc 4.1.2

EDIT: No hubo suerte hasta el momento:
Aquí están mis banderas utilizadas: -fPIC, -Wl, -rpath, -Wl, -O1

También he intentado sin éxito la siguiente:
-mno-explícito-reubicaciones
-mexplicit-reubicaciones
-mlong-llamadas
-mno-long-llamadas
-mxgot
-mno-xgot


Mientras tanto, voy a volver a la fuente en este punto e investigar más.

¿Fue útil?

Solución

Aha! Gracias a un colega mío, hemos encontrado el problema.

A continuación fue el tema:

Hubo una declaración adelantada / prototipo de una función.

void FooBarIsBest(void);

Más tarde, en el archivo se define la función.

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

El problema aquí es que en el prototipo de la palabra clave estática ha quedado fuera. Así fue como se está definiendo una función completamente nueva.

La referencia CALL16 es utilizado por gcc para el código reubicable. El código de montaje del archivo mostró que CALL16 estaba siendo utilizado en esta función ... Lo que está mal, ya que esta función es local.

Curiosamente, este código usado para compilar y enlace muy bien con una versión anterior de gcc (3.2.2). Otra lessoned aprendidas. :)

Otros consejos

Trate bandera-llamadas -mlong al compilador.

También vea la manual para opciones más específicas MIPS.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top