2013-03-08 22 views
1

我正在閱讀的一本書建議在他們打算使用的機器上編譯程序,以確保沒有任何問題。我想學C的一個重要原因是它可以與所有操作系統兼容。我在linux上使用這個。如果在預期的機器上編譯程序不是一個選項,那麼是否存在一個可以遵循的過程來確保程序能夠完美運行,而不管它運行在哪個版本的linux/bsd上?就像不同操作系統和不同體系結構的兼容功能一樣,以及如何處理每個差異以確保兼容性?C程序與Linux/BSD以及不同體系結構的兼容性

+1

有關相關問題的更多信息:http://stackoverflow.com/questions/12338811/will-the-a-out-file-run-on-a-different-machine – 2013-03-08 13:30:25

+0

任何你不能運行的原因VM?這不會解決你的架構問題,但至少你可以測試API與OS的兼容性。 – tjameson 2013-03-20 00:13:06

回答

2

使用旨在跨平臺工作的庫。如果您確實需要做任何依賴於平臺的任務,您將不得不編寫代碼來說明您希望運行應用程序的所有體系結構/平臺。

特定平臺將有#define X來確定這是代碼的運行方式,因此您可以#ifdef X檢查特定的平臺,然後在該語句中編寫代碼,對每個平臺特定的代碼執行相同的操作。

+0

「使用旨在跨平臺工作的庫」 - 如何知道這一點? 。 「你將不得不編寫代碼來說明你希望應用程序運行的所有體系結構/平臺」,過程? – user1166981 2013-03-08 13:13:58

+1

@ user1166981通常庫文檔將會告訴它與哪個平臺兼容。 – 2013-03-08 13:19:43

+0

和架構問題? – user1166981 2013-03-08 13:21:27

0

標準C是便攜式的,但與所有的語言,任何外部的內存管理和非常基本的圖書館的語言走出他們的方式包括將不會移植。

即使在Java中也存在這個問題,假設你想做一些看起來很便攜的事情(比如將控制檯窗口的顏色設置爲綠色或紅色)是不可能的。總體而言,示例書C通常非常便攜,或者具有非常小的修復(例如進行明確的轉換)的便攜式。

1

您對源代碼兼容性和二進制兼容性感到困惑。二進制文件絕對不是可移植的,這與編程語言無關。例如,在BSD上編譯的二進制文件永遠不會在Linux上運行,因爲所有的系統調用都有不同的編號和約定。

雖然C代碼應該是可移植的,並且與各種各樣的操作系統兼容,如果仔細寫的話。您只需在您定位的每個平臺上分別進行編譯。

相關問題