¿Cómo hago que Windows ejecute ejecutables de Linux?

4

Compilé un programa C ++ en Linux:

make -f mymakefile

Esto generará un archivo ejecutable, a.out. Parece que este ejecutable no se puede ejecutar en el símbolo del sistema de Windows.

Terry Qiao
fuente
44
sin hacer esto, creo que tendría que usar un compilador cruzado
Hayden Thring
32
Dado que es un programa C ++, ¿por qué no considera compilar y entregar el ejecutable en una máquina Windows por separado?
Raju Devidas
8
¿Puedes explicar qué hace el programa C ++? Si se trata de un programa de línea de comandos, probablemente funcionaría si se volviera a compilar en el compilador correcto en Windows (supongo que GCC, pero depende del código). Si usa una GUI, entonces tal vez podría compilarse en Windows, pero tal vez no. Si se trata de algún tipo de demonio o controlador de dispositivo, entonces, casi definitivamente, no se compilará en Windows.
Neil
3
No cruce la publicación: stackoverflow.com/questions/52490846/…
Greenonline el
2
@Greenonline Tanto esa pregunta como esta pueden haber surgido del mismo malentendido fundamental de los problemas involucrados en compartir código binario en los sistemas operativos, pero las preguntas reales que se hacen son muy diferentes. Este no es un caso de publicación cruzada.
jmbpiano

Respuestas:

93

No puede ejecutar de forma nativa un programa para Linux en Windows. Son sistemas operativos completamente diferentes.

Sin embargo, hay métodos que puede intentar para ejecutar el programa:

  1. Vuelva a compilar el programa en Windows para obtener un ejecutable nativo
  2. Instale el subsistema de Windows para Linux y ejecute el programa en ese entorno
  3. Instale Linux en una máquina virtual y ejecute el programa en ese entorno.
  4. Instale Cygwin o MinGW y vuelva a compilar y ejecutar en ese entorno
  5. Use un compilador cruzado

Por supuesto, dependiendo de la naturaleza del programa y sus dependencias, es posible que no se pueda ejecutar en otro entorno sin software adicional, modificaciones al código fuente , o en absoluto.

Keltari
fuente
39
Dependiendo de cómo lo mire, ejecutar bajo WSL es "nativo" en Windows, aunque no está preinstalado de manera predeterminada.
Bob
13
@Bob En el mismo sentido que ejecutar un programa de Windows en WINE es "nativo".
Socob
17
@Socob No del todo: WSL es parte del núcleo NT. Pero, de lo contrario, sí, Wine es lo más cercano a ejecutar un binario Win32 de forma nativa en Linux.
Bob
1
Usar una máquina virtual con Debian (sin escritorio) + Putty + xming es en realidad una configuración realmente genial para probar los ejecutables de Linux. Además, tiene el beneficio adicional de agregar un poco de seguridad, ya que se ejecuta en un sistema separado. Si instala un programa malicioso o, en el peor de los casos, un espejo es pirateado y distribuye actualizaciones infectadas, solo afectará a una máquina en una subred diferente (por defecto).
Ismael Miguel
77
@Bob la razón por la que WINE puede ejecutarse en el espacio de usuario y WSL debe tener componentes del núcleo es que en Linux las llamadas al sistema son parte del ABI, mientras que en Windows todo se virtualiza a través de llamadas a funciones en ntdll.dll
kinokijuf
26

Necesita el subsistema Linux para Windows (WSL) y una distribución Linux. La tienda de Windows tiene algunas distribuciones de Linux preempaquetadas con WSL. Ubuntu es bastante popular, pero como ya tienes un sistema Linux en el que construiste a.out, podría ser más fácil igualarlo.

Si no puede hacer coincidir las distribuciones de Linux y a.outno funciona como está construido, también es posible volver a ejecutar makesu distribución WSL

MSalters
fuente
1
La versión SuSE también funciona bastante bien.
copa
7

La respuesta anterior cubrió la mayoría de los aspectos, pero no estoy seguro de haber encontrado flinux (a veces llamado linux foráneo) que también se sugirió aquí y puede ser una solución más fácil dependiendo de lo que intente lograr.

(Tenga en cuenta que tengo WSL y trabajo mucho con emuladores y máquinas virtuales, y realmente no he explorado otras soluciones :))

Foreign LINUX es un traductor binario dinámico y un emulador de interfaz de llamada del sistema Linux para la plataforma Windows. Es capaz de ejecutar binarios de Linux no modificados en Windows sin ningún controlador o modificación en el sistema. Esto proporciona otra forma de ejecutar aplicaciones Linux bajo Windows en contraposición a Cygwin y otras herramientas. Ahora ejecuta una gran cantidad de aplicaciones de consola y algunas aplicaciones GUI.

xavier_fakerat
fuente
2

Otra opción que es similar a ejecutar una máquina virtual, pero no exactamente la misma es ejecutar su aplicación desde un contenedor Docker.

Sí, Docker para Windows usa una VM en segundo plano (MobyLinuxVM en HyperV), pero puede hacer algo como esto:

$ docker run a.out

y detendrá el contenedor por sí solo. También usará menos recursos y la salida se puede leer desde los terminales de Windows como cmd y PowerShell.

Un dockerfile para esta situación se verá así:

FROM docker pull ubuntu:latest

RUN make -f mymakefile

Personalmente, creo que esta es la mejor solución para ejecutar aplicaciones de Linux en Windows

Thomas
fuente
0

Para este caso en particular, yo mismo solía instalar gcc en mi Windows 8 por mingw.

Luego agregaría la ruta de mi carpeta mingw a la ruta del sistema (desde el panel de control / sistema / configuración avanzada del sistema).

Entonces podría ejecutar gcc en mi símbolo del sistema al igual que Linux.

Amin Vakil
fuente
-7

Intente obtener el equivalente de Windows Exe o MSI del ejecutable de Linux y ejecute o use cygwin para instalar el ejecutable de Linux.

Hay una herramienta mobaxterm muy útil, eche un vistazo y podrá realizar su tarea. Esta herramienta tiene cygwin y otras utilidades de Linux para continuar.

Fuente: https://www.quora.com/How-do-I-run-Linux-executable-on-windows

S.cloris
fuente
44
MobaXterm parece ser una herramienta para acceder a sistemas remotos desde un sistema Windows. Proporciona una ventana de terminal (servidor X) y actúa como cliente ssh. Por lo tanto, puede ayudar desarrollar y compilar en un sistema Unix remoto, pero no tiene características de compilación cruzada.
Axel Kemper
99
No habrá un MSI o EXE equivalente porque el OP está compilando el código ellos mismos.
selectctstriker2
2
@AxelKemper Usé MobaXterm hace años. Si recuerdo, lo que describiste fue una atracción principal, pero en realidad hizo más que eso. No recuerdo exactamente cuánto más, y no estoy seguro de si podría usarse como dice esta respuesta, pero de hecho había más de lo que parece en la superficie.
Loduwijk
2
La fuente vinculada de quora parece de baja calidad y difícil de entender.
Loduwijk
44
@Aaron: tampoco se cita, por lo que esta respuesta no es mucho más que una respuesta de solo enlace.
Ramhound