我正在閱讀的一本書建議在他們打算使用的機器上編譯程序,以確保沒有任何問題。我想學C的一個重要原因是它可以與所有操作系統兼容。我在linux上使用這個。如果在預期的機器上編譯程序不是一個選項,那麼是否存在一個可以遵循的過程來確保程序能夠完美運行,而不管它運行在哪個版本的linux/bsd上?就像不同操作系統和不同體系結構的兼容功能一樣,以及如何處理每個差異以確保兼容性?C程序與Linux/BSD以及不同體系結構的兼容性
回答
使用旨在跨平臺工作的庫。如果您確實需要做任何依賴於平臺的任務,您將不得不編寫代碼來說明您希望運行應用程序的所有體系結構/平臺。
特定平臺將有#define X
來確定這是代碼的運行方式,因此您可以#ifdef X
檢查特定的平臺,然後在該語句中編寫代碼,對每個平臺特定的代碼執行相同的操作。
「使用旨在跨平臺工作的庫」 - 如何知道這一點? 。 「你將不得不編寫代碼來說明你希望應用程序運行的所有體系結構/平臺」,過程? – user1166981 2013-03-08 13:13:58
@ user1166981通常庫文檔將會告訴它與哪個平臺兼容。 – 2013-03-08 13:19:43
和架構問題? – user1166981 2013-03-08 13:21:27
標準C是便攜式的,但與所有的語言,任何外部的內存管理和非常基本的圖書館的語言走出他們的方式包括將不會移植。
即使在Java中也存在這個問題,假設你想做一些看起來很便攜的事情(比如將控制檯窗口的顏色設置爲綠色或紅色)是不可能的。總體而言,示例書C通常非常便攜,或者具有非常小的修復(例如進行明確的轉換)的便攜式。
您對源代碼兼容性和二進制兼容性感到困惑。二進制文件絕對不是可移植的,這與編程語言無關。例如,在BSD上編譯的二進制文件永遠不會在Linux上運行,因爲所有的系統調用都有不同的編號和約定。
雖然C代碼應該是可移植的,並且與各種各樣的操作系統兼容,如果仔細寫的話。您只需在您定位的每個平臺上分別進行編譯。
- 1. 體系結構兼容性問題:與在iOS 6上工作的64位停止兼容的應用程序
- 2. 與程序兼容性
- 3. 與程序兼容性
- 4. ARM體系結構是否意味着跨核心兼容性
- 5. Xcode 5:約64位體系結構和向後兼容性
- 6. iOS armv7s體系結構兼容性和最終問題
- 7. MySQL-Python安裝錯誤:可能的體系結構不兼容?
- 8. 結構指針兼容性
- 9. i386輸入文件的體系結構與i386不兼容:x86-64
- 10. 與iOS 6及其以前版本兼容的應用程序
- 11. 粗體與JRockit兼容性
- 12. 多操作系統程序兼容性
- 13. Spring AOP與MVC結構不兼容
- 14. C++:在同樣的體系結構層
- 15. C++程序exe的兼容性
- 16. 程序集與Windows Azure上IIS使用的64位處理器體系結構不兼容
- 17. 不同的角色反應reduce應用程序體系結構
- 18. Eclipse Juno CDT:與C++ 11不兼容以及調試問題
- 19. 2結構之間的兼容性
- 20. 多頭和不同的體系結構
- 21. C結構體,結構體的指針以及正確的初始化
- 22. 程序兼容性 - 微調不RelativeLayout的
- 23. 向Google提交路徑以及與路線的兼容性
- 24. 通過與多種體繫結構兼容的網站捕獲音頻
- 25. Umbraco應用程序的體系結構
- 26. Intranet應用程序的體系結構
- 27. GUI Java應用程序與Win7兼容,但與Win10不兼容
- 28. R在不同的操作系統中閃亮的應用程序兼容性?
- 29. 限制應用程序到32位體系結構與Windows C#應用程序
- 30. 應用程序體系結構建議(可伸縮性/性能)
有關相關問題的更多信息:http://stackoverflow.com/questions/12338811/will-the-a-out-file-run-on-a-different-machine – 2013-03-08 13:30:25
任何你不能運行的原因VM?這不會解決你的架構問題,但至少你可以測試API與OS的兼容性。 – tjameson 2013-03-20 00:13:06