Ensamblador - Por qué un programa compilado para Windows (por ejemplo) no es compatible con GNU/Linux

 
Vista:
Imágen de perfil de HDB PROGRAMMING
Val: 25
Ha mantenido su posición en Ensamblador (en relación al último mes)
Gráfica de Ensamblador

Por qué un programa compilado para Windows (por ejemplo) no es compatible con GNU/Linux

Publicado por HDB PROGRAMMING (2 intervenciones) el 02/10/2020 22:35:12
Muy buenas, les vengo a preguntar una duda que tengo. Enciendo mi ordenador, abro la terminal, creo un archivo llamado hello.rs, lo edito en vim y escribo el siguiente código:
1
2
3
fn main() {
    println!("Hello, World");
}
este está escrito en Rust, lo compilo con rustc hello.rs y me retorna el binario llamado hello, lo ejecuto y me imprime en pantalla Hello, World. Hasta aquí todo bien (he escogido Rust ya que permite compilación cross-platform, por ejemplo desde GNU/Linux a Windows o macOS), pero mi duda surge al llevar este binario a Windows, le cambio la extensión a .exe e intento ejecutarlo pero, me tira el clásico error de que la aplicación no es válida; ¿por qué sucede esto si estoy usando exactamente el mismo procesador, no se supone que las instrucciones del procesador son independientes del Sistema Operativo, es esto algún problema de librerías y cómo hace Rust para realizar la compilación cross-platform?

Espero oír sus repuestas pronto.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Por qué un programa compilado para Windows (por ejemplo) no es compatible con GNU/Linux

Publicado por Nacho (81 intervenciones) el 03/10/2020 13:27:31
Es que os liáis.

La programación multiplataforma existe desde hace 50 años, por poner un número. Siempre ha consistido en un fuente que puedes compilar sin (casi) cambios para una plataforma u otra. Al compilar le dices, pues ahora quiero para Windows, y te saca un ejecutable para Windows, y ahora uno para Linux, y te lo saca para Linux, y ahora uno para FreeBSD y te lo saca para FreeBSD y para Android igual.

Ahora les ha dado por llamar programación multiplataforma a algo que no tiene nada que ver. Dicen que si haces un "programa" que se puede "compilar" y ejecutar directamente en cualquier sistema operativo lo que tienes es programación multiplataforma. Cuando haces eso lo que consigues no es un programa ejecutable por una máquina real sino por una virtual, y al no ser un programa directamente ejecutable por una máquina real será un script, y no seá considerado programación sino scripting.

Rust lo que hace es lo que ha hecho de siempre el c++: ser capaz de crear un fuente que puede ser compilado para cualquier plataforma, pero si compilas para uno podrás ejecutarlo en ese uno y no en otro, como en c++. Si lo hace más fácilmente que el c++, bienvenido sea.

Por muy iguales que sean las instrucciones del procesador no lo son las cabeceras que tienen los ejecutables de cada sistema operativo, ni las formas de llamar las funciones que acaban un programa, ni las que reservan memoria, ni las de nada de nada, así que será imposible que un programa compilado para un sistema operativo funcione en otro.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de HDB PROGRAMMING
Val: 25
Ha mantenido su posición en Ensamblador (en relación al último mes)
Gráfica de Ensamblador

Por qué un programa compilado para Windows (por ejemplo) no es compatible con GNU/Linux

Publicado por HDB PROGRAMMING (2 intervenciones) el 03/10/2020 14:12:02
Yo no dije compilación multiplataforma, sino compilación cross-platform (compilar de Windows a LINUX, por ejemplo), y no todos los lenguajes multiplataforma son de scripting, por ejemplo Java, Kotlin y Scala. Todos estos requieren de compilación para luego ser ejecutados por una máquina virtual, y por ejemplo un pequeño lenguaje que programé (aún no tiene compilador) en el mismo Rust, lo puedes buscar en crates.io. Te doy las gracias por aclararme la duda, se que por ejemplo, las instrucciones de GAS no son las mismas de MASM.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar