Incompatibilidad 64-32 bits

Aziwar

Buenas! Tengo un problema un tanto extraño.. En mi ordenador tengo Ubuntu 64 bits y los ordenadores de la universidad tienen Bardinux 32 bits (es una distribucion de la propia universidad, clon de ubuntu).

El tema es que siempre he podido hacer las prácticas de programación sin problemas, pero últimamente (las 2 últimas prácticas que he hecho) hay partes en las que me da error runtime en la universidad pero en mi casa va bien. A lo que me dio por probar con un live cd de una destro de 64 bits en el portatil de mi novia, y efectivamente funcionan los programas.

Porque puede pasar eso? alguna opción que haya tocado o algo? (no me suena haber tocado nada de opciones, pero tal vez alguna combinacion de teclas o algo)

Uso para escribir el código o bien XEmacs o bien Kate

cabron

Posiblemente hayas activado alguna opción para que el código se compile para un procesador de 64bits. Mira donde se configuren las opciones del compilador a ver si ves algo así.

r2d2rigo

Te sale mas rapido recompilar la practica en la uni, a no ser que estemos hablando de cantidades ingentes de codigo claro :P

Aziwar

No no, no funciona eso. Yo siempre llevo el archivo .pas (es freepascal lo que usamos) y alli lo compilo (si llevo el ejecutable directamente no funciona)

GamA

Compilar algo para 64 bits e intentarlo ejecutar en 32 bits es un suicidio. Como te dicen debes llevarlo a un pc con sistema operativo de 32 bits ( ya sea la universidad, otro de tus pcs o lo que sea) y llevarte los ejecutables alli.

Es como aprender a conducir coches automáticos y comprar un coche manual xD.

Un saludo ;)

Aziwar

a ver... a ver si nos entendemos xD

Mi PC es 64 bits, pero yo en ningún lado he puesto que compile SOLO para 64 bits, es más ni se como hacerlo. LLevo desde octubre haciendo programas y hasta ahora no me habían dado ningún fallo.

Después lo que decis de el ejecutable y eso, yo cuando llevo la práctica a clase copio en el pendrive únicamente el archivo Mediavida.pas, ya que aunque copie el ejecutable, tengo que recompilar la práctica en el ordenador que la voy a ejecutar para que funcione (cosas del pascal? no se xD). Por eso únicamente estos llevando un "archivo de texto" por así decirlo, y compilándolo en un sistema de 32 bits....y da runtime!!

No es runtime inmediato, osea el programa se ejecuta pero ya desde que llegue alguna parte ya peta, cosa que en 64 bits no.

Eso es todo xD

JuAn4k4

Seguramente no sea problema del s.o.

Los compiladores que usas son distintos por lo que te generan ejecutables distintos, tendras que solucionar el problema en la universidad, donde usas el comilador con el que te corregiran la practica.

cabron

Vamos a ver si te entendido, el mismo código fuente, compila y se ejecuta bien en un sistema de 64 bits, pero no en uno de 32 ¿es esto?

Bueno, si fuese C o C++, se me ocurriría que en algún lado de tu codigo haces alguna operación en la que se tiene en cuenta el tamaño de la palabra de la máquina, y haces alguna operación que solo funciona cuando la palabra tiene 64 bits, pero no sé si en pascal es posible cometer algún error de ese tipo.

Aziwar

"Vamos a ver si te entendido, el mismo código fuente, compila y se ejecuta bien en un sistema de 64 bits, pero no en uno de 32 ¿es esto?"

eso mismo xD

juanaka yo tengo el portatil de mi madre que tiene ya sus añillos, y le meto un livecd de Ubuntu 32 bits y tp funciona el programa que hice en mi pc con el Ubuntu de 64

JuAn4k4

#9 Los compiladores tambien son distintos en las versiones de 64 y 32b, no solo cambia el tamaño de la palabra.

Aziwar

pero me refiero, yo llego el codigo (que se supone que no es más que texto no?) y lo compilo en el pc que vaya a usar, y da error

JuAn4k4

¿ Y por que no deberia dar error ? ¿ Porque en otro sitio y con otro compilador funciona ?

Por ejemplo, en ADA el "and" no esta cortocircuitado, sin embargo hay compiladores que si lo cortocircuitan, lo que hara que en algunos sitios funcione bien y en otros te de error.

En pascal, no hay precedencia en operadores logicos (And,or,etc) sobre relacionales ( >,<, etc ) lo cual no quiere decir que algun compildor mas nuevo lo haya implementado ( por ej. el que usas en ubuntu 64b porque no ), sin embargo el compilador de tu uni, es de los normales de pascal, pues llegara una expresion estilo : a > b and c < d , y te hara (a > (b and c)) < d; mientras que en tu casa hara (a>b) and (c<d)

Pueden ser pequeñas tonterias las que cambien "de funcionar" a "explotar".

Pon el codigo a ver, ¿ es muy largo ?

Aziwar

En pascal no puedes poner eso que dices pq te da fallo de compilación, tienes que separarlos por ( ).

El código si es bastante largo entre units y demás xD ya conseguí entregar la práctica de esta semana y no petó (ufff xDD) ahora en semana santa tal vez le meta una formateada y le mande el de 32 bits para salir de problemas xD

Dod-Evers

Si largo son 300 lineas... xD

Haz lo que te dice Juanaka, que sabe de esto, además está enseñao, yo ni me acuerdo de las cosas que cuenta

Aziwar

coño imaginate un post de 300 lineas...xDD

JuAn4k4

#13 Da fallo precisamente porque se que Pascal tiene ese fallo de diseño donde el operador "and" tiene precedencia sobre los otros operadores "<" ">" etc.. Lo puse como ejemplo precisamente por eso mismo. Sin embargo imaginate que coje alguien y hace un compilador que si te deja hacerlo sin parentesis, y que ese compilador lo ponen en ubuntu 64b y tu por ejemplo sin darte cuenta lo pongas sin parentesis, solo que en este caso dara error de compilacion y no de ejecucion, pero un caso similar podria darse y dar error de ejecucion, que es lo que intentaba explicar sin exito.

Para poner codigo tienes http://pastebin.com/

-Sk1LL-

#15 caemos muertos xd

Usuarios habituales

  • -Sk1LL-
  • JuAn4k4
  • Aziwar
  • Dod-Evers
  • cabron
  • GamA
  • r2d2rigo