
這個問題有點具體,所以假設如下:
- 該程式的 C 原始程式碼沒有明確使用特定於平台的函數(例如,它沒有明確使用系統呼叫)。
- 為了與作業系統交互,原始碼使用 C stdlib。
- stdlib 在編譯時未連結。
- 該程式是在一台運行 Linux 的機器上為 Linux 編譯的,然後轉移到另一台運行 Windows 的機器上。
- 在 Windows 上執行程式之前,Linux 可執行檔會(以某種方式)轉換為與 Windows 相容的格式。
- 兩台機器具有相同的硬體。
- 兩台機器都有 C stdlib 的實作。
現在回答問題:
- 考慮到上述所有假設,該程式可以在 Windows 上執行嗎?如果沒有,為什麼?
- 如果有一個假設是錯的,為什麼會這樣呢?
答案1
Windows 和 Linux 上的二進位檔案具有非常不同的格式,因此一個不能在另一個上運行。 Linux 共享庫與 Windows DLL 完全不同。
跨系統執行是透過以下任一方式實現的:
- 針對目標系統重新編譯(許多編譯器能夠在系統A上編譯並在系統B上執行)
- 在模擬器上運行,例如 葡萄酒、交叉和其他
- 在虛擬機器、Windows Subsystem for Linux (WSL)、Docker 或類似機器中執行。
答案2
不行。您必須為 Windows 重新編譯程式。
或者,您可以在適用於 Linux 的 Windows 子系統或執行 Linux 的虛擬機器中本機執行該程式。