2017-09-10 98 views
0

我已經閱讀了關於在Linux上編譯C/C++源代碼以在Windows上運行它們的一些信息。我也用MinGW試過這個,一切正常。在Linux上爲不同的平臺編譯C/C++源代碼

但是,我不明白爲什麼我必須在Linux上使用MinGW來製作在Windows上工作的二進制文件。什麼使g ++輸出無法在Windows上運行?還有什麼可以讓g ++輸出在Linux上運行它們?輸出文件是否具有不同的結構:標題,數據等,只能由特定的操作系統解釋?

任何人都可以告訴我嗎?如果你們中的任何一位能夠解釋我,這不僅適用於業餘愛好者,也適用於對操作系統感興趣的人,並且想知道這背後的真正意義。

+2

https://en.wikipedia.org/wiki/Comparison_of_executable_file_formats - 每個OS系列都有自己的,或多或少。 –

+0

'輸出文件是否具有不同的結構:標題,數據等,它們只能被特定的操作系統解釋?「是的。而且,可用的環境和庫也是完全不同的(例如,當程序啓動時需要執行什麼,等等.etc。) – deviantfan

+0

[x86 Linux與Windows?]可能重複(https://stackoverflow.com/questions/19390331/x86-linux-versus-windows) –

回答

0

在Linux for Windows上構建二進制文件相當於交叉編譯,就像在Android上構建Linux上的二進制文件一樣。 Windows和Linux機器可能(可能)具有類似的硬件,但它們是非常不同的操作平臺。

當您執行某些操作時,在平臺級別會發生什麼,即使像prinf("Hello world")這樣簡單的操作在平臺之間有所不同。也就是說,角色呈現給控制檯的方式是不同的。當涉及諸如fork()這樣的呼叫時,遇到更大的挑戰,這些呼叫並不與Windows流程管理所做的任何事情相對應。

我相信,即使在相同的硬件上,即使程序代碼和數據加載到內存中的方式在Windows和Linux之間也是不同的。

沒有特別的理由認爲爲一個平臺構建的本地二進制文件會在另一個平臺上運行。使用Java,我們已經習慣了編譯代碼是跨平臺的想法,但Java.class文件中的內容不是本機可執行代碼 - 我們依靠Java運行時系統來執行在平臺級別是正確的。使用C/C++,我們需要構建工具來完成這些工作(通常還需要一些程序員專業知識)。

相關問題