題 如何讓Windows運行Linux可執行文件?


我編了一個 C ++ Linux下的程序:

make -f mymakefile

這將生成一個可執行文件, a.out。看來這個可執行文件無法在Windows命令提示符下運行。


4
2017-09-25 00:39


起源


沒有做過這個id認為你必須使用交叉編譯器 - Hayden Thring
既然它是一個C ++程序,為什麼不考慮單獨在Windows機器上編譯和交付可執行文件呢? - Raju Devidas
你能解釋一下C ++程序的作用嗎?如果它是一個命令行程序,那麼如果在Windows下正確的編譯器下重新編譯它可能會工作(我假定GCC,但取決於代碼)。如果它使用GUI,那麼也許它可以在Windows上編譯,但也許不是。如果它是某種守護進程或設備驅動程序,那麼幾乎可以肯定,它不會在Windows上編譯。 - Neil
請不要交叉發帖: stackoverflow.com/questions/52490846/... - Greenonline
@Greenonline這個問題和這個問題可能源於對跨操作系統共享二進制代碼所涉及的問題的相同的基本誤解,但所提出的實際問題是非常不同的。這不是交叉發布的情況。 - jmbpiano


答案:


您無法在Windows下本機運行Linux程序。它們是完全不同的操作系統。

但是,您可以嘗試運行該程序的方法:

  1. 在Windows上重新編譯該程序以獲取本機可執行文件
  2. 安裝 適用於Linux的Windows子系統 並在該環境中運行該程序
  3. 在Linux中安裝Linux 虛擬機 並在該環境中運行該程序
  4. 安裝 Cygwin的 要么 MinGW的 並重新編譯並在該環境中運行
  5. 用一個 交叉編譯器

當然,根據程序的性質及其依賴性,如果沒有其他軟件,對源代碼進行修改或根本不可能在另一個環境中運行,則可能無法運行。


92
2017-09-25 00:57



根據您的觀察方式,在WSL下運行在Windows下是“本機”,但默認情況下不預先安裝。 - Bob
@Bob同樣意義上說,在WINE下運行Windows程序是“本機的”。 - Socob
@Socob不完全:WSL是NT內核的一部分。但是否則,Wine就像在Linux上本地運行Win32二進製文件一樣接近。 - Bob
使用帶Debian的VM(沒有桌面)+ Putty + xming實際上是測試Linux可執行文件的一個非常酷的設置。此外,它還增加了一些安全性,因為它在一個單獨的系統中運行。如果您安裝惡意程序,或者在最壞的情況下,鏡像被黑客攻擊並分發受感染的更新,它將只影響不同子網中的一台計算機(默認情況下)。 - Ismael Miguel
@Bob WINE可以在用戶空間運行而WSL必須有內核組件的原因是Linux系統調用是ABI的一部分,而在Windows上,一切都通過調用ntdll.dll中的函數進行虛擬化 - kinokijuf


您需要適用於Windows的Linux子系統(WSL)和Linux發行版。 Windows商店有一些預先打包了WSL的Linux發行版。 Ubuntu相當受歡迎,但是因為你已經有一個你構建的Linux系統 a.out,這可能是最簡單的匹配。

如果你不能匹配Linux發行版,和 a.out 不起作用,也可以重新運行 make 在你的WSL發行版上


25
2017-09-25 09:15



SuSE版也很好用。 - cup


上面的答案涵蓋了大多數方面,但不確定是否遇到過 flinux (有時也稱為國外linux),恰好也有人提出過 這裡 並且可能是一種更簡單的解決方法,具體取決於您要實現的目標。

(注意我有WSL並且經常使用模擬器和虛擬機,我還沒有真正探索其他變通方法:))

Foreign LINUX是一個動態二進制轉換器和一個Linux系統調用   用於Windows平台的界面模擬器。它能夠運行   Windows上未修改的Linux二進製文件,沒有任何驅動程序或   對系統的修改。這提供了另一種運行方式   Windows下的Linux應用程序與Cygwin等相悖   工具。它現在運行了大量的控制台應用程序和一些GUI   應用。


6
2017-09-25 09:14





您可以在Linux上交叉編譯Windows。

看到 https://stackoverflow.com/questions/2033997/how-to-compile-for-windows-on-linux-with-gcc-g

這允許您使用Linux編譯在Windows下運行的二進制可執行程序。


5
2017-09-25 10:42





另一個類似於運行虛擬機的選項,但不完全相同的是從Docker容器運行您的應用程序。

是的Docker for Windows在後台使用VM(HyperV上的MobyLinuxVM),但您可以這樣做:

$ docker run a.out

並將自行停止容器。它還將使用更少的資源,並且可以從Windows自己的終端(如cmd和PowerShell)讀取輸出。

這種情況的dockerfile看起來像這樣:

FROM docker pull ubuntu:latest

RUN make -f mymakefile

我個人認為這是在Windows中運行Linux應用程序的最佳解決方案


2
2017-09-27 14:09





對於這個特殊情況,我自己曾經通過mingw在我的Windows 8上安裝gcc。

然後我將我的mingw文件夾的路徑添加到系統路徑(從控制面板/系統/高級系統設置)。

然後我可以在我的命令提示符上運行gcc,就像linux一樣。


0
2017-09-26 18:25





嘗試獲取windows exe或msi等效的linux可執行文件並運行或使用cygwin安裝linux可執行文件。

有一個工具mobaxterm非常有用,看看你可以完成你的任務。這個工具有cygwin和其他linux實用程序繼續。

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


-7
2017-09-25 09:34



MobaXterm 似乎是從Windows系統訪問遠程系統的工具。它提供了一個終端窗口(X服務器)並充當ssh客戶端。因此,它可能有助於在遠程Unix系統上開發和編譯,但它沒有交叉編譯功能。 - Axel Kemper
沒有等效的MSI或EXE,因為OP自己編譯代碼。 - selectstriker2
@AxelKemper我多年前使用過MobaXterm。如果我記得,你所描述的是一個主要的吸引力,但它確實做得更多。我不記得到底有多少,我不確定它是否可以用作這個答案狀態,但確實有更多的東西,而不是表面上顯而易見的。 - Aaron
來自quora的鏈接來源似乎質量低且難以理解。 - Aaron
@Aaron - 它也沒有引用,所以這個答案,只不過是一個鏈接唯一的答案。 - Ramhound