Go Down

Topic: Error de compilación: no entiendo por qué se produce. (Read 65557 times) previous topic - next topic

ener

En un programa que estoy haciendo me aparece este error, y quería preguntar qué significa:

Code: [Select]

collect2.exe: error: ld returned 5 exit status

exit status 1
Error compilación en tarjeta Arduino/Genuino Uno.


Y lo extraño del asunto es que en mi programa no hay ningún error. Luego de decenas de pruebas llegué a un punto muerto, cuando el programa compila bien, sin problemas, pero aumento una línea antes de la función void setup() declarando una variable, y entonces al compilar da el error.

La línea que aumento es
Code: [Select]

byte z;


Esto me hace pensar que quizá hay un límite en la cantidad de variables globales, y justamente lo sobrepasé al declarar una más, sin embargo, cuando quito esa línea y compila bien, en el resumen de compilación me sale esto:

Code: [Select]

El Sketch usa 3.428 bytes (10%) del espacio de almacenamiento de programa. El máximo es 32.256 bytes.
Las variables Globales usan 212 bytes (10%) de la memoria dinámica, dejando 1.836 bytes para las variables locales. El máximo es 2.048 bytes.


Según interpreto, queda memoria más que suficiente para declarar muchas variables más.

Haciendo una búsqueda, veo que "ld" es el linker, pero no sé qué es el estado 5 que menciona el error...

Estaba usando la versión Arduino 1.6.8 y para probar instalé la 1.6.9, pero el comportamiento es exactamente el mismo.

Agradeceré si alguien me da alguna luz, pues ya no puedo seguir avanzando con mi programa por causa de ese error.

carlosjq10

Postea el código para que le hechen un vistazo. A lo mejor el problema sea alli. Otra cosa, verifica que estés usando el COM correcto porque da la impresion que uno de los errores es que no te esta detectando la tarjeta arduino.

ener

Gracias por la respuesta, Carlosjq10. Nada tiene que ver el COM, dado que el error se produce al compilar, no al comunicarse con arduino (que ni lo hace, pues uso la opción de compilar solamente -el ícono de tiqueo, "Verificar"-, no uso la opción de subir el programa al arduino -el ícono de flechita a la derecha, "Subir"-).

Hice más pruebas, y la situación dio un giro completo:

Por un lado, cambié la placa de destino. Yo tengo un Arduino UNO, por lo que tengo seleccionada esa placa. Pero para probar seleccioné Arduino Leonardo (aunque no tenga esa placa), y para mi sorpresa compiló bien sin errores.

Por otro lado hice la prueba en otra computadora, y para mi sorpresa compila bien en todas las situaciones (con la placa Arduino UNO seleccionada también).
Entonces estimo que se trata del sistema operativo donde está trabajando... La computadora en la que al compilar da el extraño error es una con windows server 2003. Y la computadora donde compila bien sin errores es una con Windows 8.1 El Windows server 2003 es similar y equivalente en algunas cosas al windows XP, por lo que pienso (aunque no lo he probado) que el mismo error se produciría en Windows XP.

¿Por qué será que en las mismas condiciones de configuración, y con el mismo programa fuente, en un sistema operativo da error al compilar, y en otro sistema operativo no da ese error?

He buscado este error, y en el foro de arduino en inglés hay más de una referencia de que da este error en Windows XP.

surbyte

Yo sigo sin ver el código, y como dicen las normas, pega tu código usando tags para que podamos ayudar!!!!!!!!!!
Cómo quieres que reproduzcamos tu problema si no tenemos lo que posiblemente lo genere?
Posteas tu código y al menos 4 o 5 foreros vamos a intentar compilar y 4 te dirán que funciona bien y 1 dirá EEHHH a mi no me compila por tal o cual razón.

No pierdas el tiempo.. sigue las Normas del foro!!!

Quote
11.  Tips para obtener mejores respuestas



• Menciona que Arduino tienes. ¿Es un UNO?  ¿Leonardo? ¿Due? ¿Mini? ¿Mega? El problema podría ser específico de cualquiera de estos modelos.
• Describe tu problema en detalle.
• Si es relacionado a una pieza electrónica (chip o modulo), menciona el modelo exacto y preferentemente un link al data sheet.
• Describe cómo has conectado cosas como registros.  ¿Los has conectado a tierra? ¿o +5v? ¿Están con resistencias pull-up ó pull-down? Postea el circuito si tienes dudas.
Agrega el Sketch (código) ¡completo!  Si no lo haces harás perder el tiempo a las personas que te pidan hacerlo. Sin embargo, con problemas de código, si es posible postear un sketch mínimo que reproduzca el problema  - sin cientos de líneas de código. Si el problema se desvanece en el sketch reducido, el error no estaba donde pensabas que estaba.
Copia y pega el código que te ha dado problemas, no trates de reproducirlo escribiéndolo de memoria en el post.
• Si tienes un error, postea el mensaje de error, (copia y pega). No solo digas: "Tengo un error".
Todo el tiempo repitiendo estos 11 puntos!!

ener

El código del programa que estoy haciendo tiene muchos comentarios y algunas librerías, por lo que tendría que subir varios archivos. Estaba por hacerlo, sin embargo (luego de tanta prueba que hice), me resultó muy fácil hacer un ejemplo simple que dé error al compilar.

En el ejemplo simple que pongo más abajo, en la computadora que uso (con Windows Server 2003) da error al compilar, y en otra computadora con windows 8.1, compila sin errores. En ambas computadoras configuré para que compile para la placa "Arduino/Genuino Uno". En ambas computadoras hice la prueba con el Arduino 1.6.8 y el arduino 1.6.9 con idéntico resultado en todos los casos.

El error que da al compilar en la computadora con windows server 2003 es el siguiente:
Code: [Select]

collect2.exe: error: ld returned 5 exit status

exit status 1
Error compilación en tarjeta Arduino/Genuino Uno.


Sin embargo, si borro la primera línea (byte unoMas;), entonces simplemente compila bien, y el resultado que da al compilar es el siguiente:

Code: [Select]

El Sketch usa 468 bytes (1%) del espacio de almacenamiento de programa. El máximo es 32.256 bytes.
Las variables Globales usan 12 bytes (0%) de la memoria dinámica, dejando 2.036 bytes para las variables locales. El máximo es 2.048 bytes.



El ejemplo simple:
Code: [Select]

byte unoMas;

byte a;
byte b;
byte c;
byte d;
byte e;
byte f;
byte g;
byte h;
byte i;
byte j;
byte k;
byte l;
byte m;
byte n;
byte o;
byte p;
byte q;
byte r;
byte s;
byte t;
byte u;
byte v;
byte w;
byte x;
byte y;
byte z;

char aa[15];
char ab[15];
char ac[15];
char ad[15];

void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:
a=99;
b=a+1;
c=b+a;
}


En cuanto pueda voy a hacer hacer las mismas pruebas en una computadora con windows XP y aviso (estimo que tendrá el mismo comportamiento que con winows server 2003).

Parece que voy a tener que avanzar con mi programa y compilarlo en la otra computadora (con windows 8.1), cosa que me causará bastantes incomodidades.

surbyte


Quote
En el ejemplo simple que pongo más abajo, en la computadora que uso (con Windows Server 2003) da error al compilar, y en otra computadora con windows 8.1, compila sin errores. En ambas computadoras configuré para que compile para la placa "Arduino/Genuino Uno". En ambas computadoras hice la prueba con el Arduino 1.6.8 y el arduino 1.6.9 con idéntico resultado en todos los casos.
Menos mal que aclaraste esto, Win Server 2003 frente a Win 8. Con los Server yo he experimentado todo tipo de problemas por eso no pierdo el tiempo y no lo uso jamas para trabajo. Lo uso como server, Me entiendes?
Si funciona con Win 8 es que el problema esta en el Server 2003 y algo que le falta o que debes buscara en el Registro de Eventos. Si buscas ahi, seguramente verás alguna idea de cual es el problema.

Visionario

Para mi el problema esta en las rutas de windows.

Recomiendo que uses nombres con estandar 8.3 en los nombres y/o no usar espacios en las rutas, el compilador puede estar interpretando mal eso.

Saludos

ener

Menos mal que aclaraste esto, Win Server 2003 frente a Win 8. Con los Server yo he experimentado todo tipo de problemas por eso no pierdo el tiempo y no lo uso jamas para trabajo. Lo uso como server, Me entiendes?
Si funciona con Win 8 es que el problema esta en el Server 2003 y algo que le falta o que debes buscara en el Registro de Eventos. Si buscas ahi, seguramente verás alguna idea de cual es el problema.
Yo no experimenté problemas. En esta computadora con win server 2003 programé en PHP, JAVA, C, Lazarus, Delphi, Basic script (macros de word y outlook)... Nunca tuve problemas. De todas formas, pronto probaré en Windows XP y apuesto que el resultado será el mismo.


Para mi el problema esta en las rutas de windows.

Recomiendo que uses nombres con estandar 8.3 en los nombres y/o no usar espacios en las rutas, el compilador puede estar interpretando mal eso.

Saludos
Realmente no creo que ese sea el problema. De hecho, en el ejemplo simple que puse más arriba todo estaba con nombre de menos de 8 letras y sin espacios. (El windows 95, 98 y vista tenían ese problema, pero desde windows XP ya no).

Por otro lado, como dije arriba, al compilar da error, y borrando una línea del código, ya no da error... No parece ser problema de rutas o nombres de archivos.

carlos_britos

Hola
Alguien ha encontrado una solucion o llegó a una conclusion valida a este problema ?
Tengo este error (el del asunto) repetidamente, con cambios mínimos en el codigo.
Si el problema es XP y compilo con Win 8 o 10 el problema desaparece por completo ?
Los arduinos compilados con Win 8 o 10 despues podran trabar con XP. (es un master (Ard UNO) y 3 esclavos (Ard UNO) manejados desde la pc con XP)

Este en codigo que no compila en XP, alguien podria compilarlo en Win 8 o 10 para saber que pasa ?
Observar comentarios en codigo.

Code: [Select]

#include <Wire.h>

int nTiempo      = 0;
int nTempActual  = 0;
int nTempDeseada = 0;
int nVelocidad   = 0;

void setup()
{
   Wire.begin( 1 );
   Wire.onRequest( pedido );
   Serial.begin( 9600 );
}

void loop()
{
   if( nTiempo > 250 )
   {
      nTiempo = 0;
      nTempActual = 0;
      nTempDeseada = 0;
      nVelocidad = 0;
   }

   nTiempo += 1;
   nTempActual += 2;
   nTempDeseada += 3;
   nVelocidad += 4;
}

void pedido()
{
   digitalWrite(13, LOW);
 //  delay(1000);            // esta linea da error

   Wire.write( nTiempo );
   Wire.write( nTempActual );
   Wire.write( nTempDeseada );
   Wire.write( nVelocidad );
   Wire.write( "final" );      //esta linea da error si no esta Serial.print(""); a continuacion
   Serial.print("");           // sin esta linea da error

   digitalWrite(13, HIGH);
}


carlos_britos

Hola

Para los interesados en el tema.

Tenia instalado Arduino 1.6.11  (da problemas)

Reinstale Arduino 1.6.0 ( no da problemas) Al menos hasta ahora con las varias pruebas que hize y todo fue ok.

Ademas el tiempo de compilacion se redujo notablemente a unos pocos segundos.


surbyte

Y tu pregunta carlos_britos que tiene que ver con el hilo original?


Lee las normas y crea la próxima vez tu propio hilo!!


Go Up