¿Puede este programa C, que utiliza puramente una biblioteca estándar C no vinculada y está compilado para Linux, ejecutarse en Windows?

¿Puede este programa C, que utiliza puramente una biblioteca estándar C no vinculada y está compilado para Linux, ejecutarse en Windows?

La pregunta es un poco específica, así que suponga lo siguiente:

  1. El código fuente C del programa no utiliza explícitamente funciones específicas de la plataforma (no utiliza explícitamente llamadas al sistema, por ejemplo).
  2. Para interactuar con el sistema operativo, el código fuente utiliza C stdlib.
  3. La stdlib no está vinculada en el momento de la compilación.
  4. El programa se compiló para Linux en una máquina con Linux y luego se trasladó a otra máquina con Windows.
  5. Antes de ejecutar el programa en Windows, el ejecutable de Linux se convierte (de alguna manera) a un formato compatible con Windows.
  6. Ambas máquinas tienen el mismo hardware.
  7. Ambas máquinas tienen una implementación de C stdlib.

Ahora la(s) pregunta(s):

  1. Dadas todas las suposiciones anteriores, ¿se puede ejecutar el programa en Windows? Si no, ¿por qué?
  2. Si hay una suposición incorrecta, ¿por qué?

Respuesta1

Los binarios en Windows y Linux tienen formatos muy diferentes, por lo que uno no puede ejecutarse en el otro. Las bibliotecas compartidas de Linux no son en absoluto iguales a las DLL de Windows.

La ejecución entre sistemas se logra mediante cualquiera de:

  • Recompilación para el sistema de destino (muchos compiladores son capaces de compilar en el sistema A para ejecutarlo en B)
  • Ejecutando en un emulador, como VINO, CrossOver y otros
  • Ejecutándose en una máquina virtual, Subsistema de Windows para Linux (WSL), Docker o similar.

Respuesta2

No. El formato ejecutable de Linux no es compatible con Windows. Tendrías que recompilar el programa para Windows.

Alternativamente, puede ejecutar el programa de forma nativa en el subsistema de Windows para Linux o en una máquina virtual que ejecute Linux.

información relacionada