這個純粹使用未連結的 C stdlib 並為 Linux 編譯的 C 程式可以在 Windows 上運行嗎?

這個純粹使用未連結的 C stdlib 並為 Linux 編譯的 C 程式可以在 Windows 上運行嗎?

這個問題有點具體,所以假設如下:

  1. 該程式的 C 原始程式碼沒有明確使用特定於平台的函數(例如,它沒有明確使用系統呼叫)。
  2. 為了與作業系統交互,原始碼使用 C stdlib。
  3. stdlib 在編譯時未連結。
  4. 該程式是在一台運行 Linux 的機器上為 Linux 編譯的,然後轉移到另一台運行 Windows 的機器上。
  5. 在 Windows 上執行程式之前,Linux 可執行檔會(以某種方式)轉換為與 Windows 相容的格式。
  6. 兩台機器具有相同的硬體。
  7. 兩台機器都有 C stdlib 的實作。

現在回答問題:

  1. 考慮到上述所有假設,該程式可以在 Windows 上執行嗎?如果沒有,為什麼?
  2. 如果有一個假設是錯的,為什麼會這樣呢?

答案1

Windows 和 Linux 上的二進位檔案具有非常不同的格式,因此一個不能在另一個上運行。 Linux 共享庫與 Windows DLL 完全不同。

跨系統執行是透過以下任一方式實現的:

  • 針對目標系統重新編譯(許多編譯器能夠在系統A上編譯並在系統B上執行)
  • 在模擬器上運行,例如 葡萄酒、交叉和其他
  • 在虛擬機器、Windows Subsystem for Linux (WSL)、Docker 或類似機器中執行。

答案2

不行。您必須為 Windows 重新編譯程式。

或者,您可以在適用於 Linux 的 Windows 子系統或執行 Linux 的虛擬機器中本機執行該程式。

相關內容