假設所有32位庫都存在,似乎大多數32位應用程序都將在64位Linux上運行。但在我看來,可能存在與架構相關的功能問題,在這裏我正在考慮信號和setjmp/longjmp。我想知道是否有經驗豐富的人可以評論哪些功能(如果有的話)會導致32位應用程序與64位操作系統不兼容。什麼可以使32位應用程序與64位Linux操作系統不兼容?
回答
即使setjmp
和longjmp
也應該正常工作。用戶空間應用程序沒有特別的問題,這會引發任何問題。實際的32位仿真是由處理器完成的。系統調用是返回到64位內核的接口,Linux正確處理該內核。
如果應用程序是惡意的,並將可執行代碼發送到另一個64位進程來執行,那麼各種事情都會中斷。
對於在64位系統上運行的32位應用程序,最大的問題是程序員錯誤地對整數或指針長度做出假設,然後用它們做非可移植的事情。對於C/C++程序員在this article中考慮的問題有很好的綜述,例如Sun
如果Linux編譯時沒有32位傳統支持,32位程序將無法正常工作。
正如我所說,假設所有的32位庫都存在,這意味着內核也是用32位支持構建的:-) – 2010-07-01 19:11:28
我們以32位應用程序爲例,它有一個主模塊並加載一個32位相關的dll。如果您正在遷移主模塊以及32位相關DLL,該應用程序在64位計算機上運行良好。但是,如果只遷移主模塊,即使存在,也不能從64位機器加載依賴64位的dll。 的原因是 -
在數據存儲器的不同取向在數據類型大小
差異
請參閱:
http://dev-faqs.blogspot.com/2008/03/accessing-32-bit-dlls-from-64-bit-code_02.html
也許這是你在找什麼!
有真的只有兩個,與在64位Linux上運行32個應用程序的出現,假設你有必要的32位庫的問題:
一些
ioctl()
S代表較少使用的驅動程序無法正常工作時,在64位內核上由32位用戶進程使用;應用已經硬編碼
/usr/lib
和/或/lib
路徑搜索,如果32個庫位於其他地方的動態庫將無法正常工作。
- 1. 32位應用程序的64位操作系統
- 2. 64位操作系統上的32位或64位應用程序?
- 3. 32位/ 64位操作系統?
- 4. 32位操作系統VC++應用程序遷移到64位操作系統VC++應用程序
- 5. 什麼數據類型是32位操作系統中的16位和64位操作系統中的32位?
- 6. 編纂的32位系統64位系統 - 兼容性
- 7. 在64位操作系統上以32位身份運行AnyCPU應用程序
- 8. 32位Excel宏與64位不兼容
- 9. 具有32位操作系統程序兼容性的64位處理器?在64位處理器上的
- 10. 確定從32位操作系統或64位操作系統C/C++應用
- 11. 32位/ 64位Windows/Linux應用程序
- 12. Windows 64位操作系統上的32位或64位Android SDK?
- 13. 32位64位兼容
- 14. 64位Java應用程序:是64位操作系統,64位JRE和64位應用程序嗎?
- 15. 64位應用程序的32位操作系統的文件夾
- 16. 是否可以在64位操作系統中使用32位STS?
- 17. 使用arm v8運行32位和64位操作系統
- 18. 在32位操作系統中使用64位dll
- 19. 模塊化計算32位與64位操作系統
- 20. 32位dll 64位操作系統與regsvr32.exe
- 21. 64位操作系統與32位MS辦公室問題
- 22. 64位操作系統上的32位VC++可再發行?
- 23. 在64位應用程序中使用32位互操作DLL
- 24. 在64位操作系統上啓動32位進程
- 25. Windows 64位和32位不兼容性
- 26. 在64位操作系統上編寫程序時,程序是否會運行在32位操作系統上?
- 27. 32位DLL不能在64位操作系統
- 28. 對32位和64位操作系統的不同計算
- 29. 使用64位操作系統的VB6應用程序開發
- 30. 在64位操作系統上使用Web Garden的32位應用程序的IIS6可用內存(32Gb Ram)
我見過很多很多項目,當爲x64編譯時,僅僅因爲這個問題就會產生數百甚至數千的警告。這包括最近的項目,所以沒有任何藉口像'是的,但當時沒有64位' – stijn 2010-07-01 18:49:36
當你想重新編譯64位體系結構的32位應用程序時,這些問題。但我在問一個已經用32位編譯器編譯的應用程序。編譯器當然已經對指針大小做出了假設!據我瞭解,這是由64位操作系統來適當處理一個32位應用程序。 – 2010-07-01 18:50:01
你說得對。當然,當編寫傳統的32位應用程序時,他們不會知道它們可能會在以後運行在64位系統上。通過其鏈接器/加載程序(例如ld.so或ld.linux.so)的64位操作系統必須將地址重新映射到其64位進程地址空間,以使其正常運行。如果32位應用程序寫得很好(按照文章),那麼一切都應該繼續。 – bjg 2010-07-01 19:02:29