我寫了一個C程序,並使用someProgram.c保存並編譯到我的64位機器上。生成了「someProgram.out」文件。我將someProgram.out發送給朋友,但沒有在他的機器上執行。它報告「無法執行二進制文件」錯誤,當他試圖在他的虛擬機中安裝的Ubuntu 14.04上運行它。 如何編寫代碼,以便它可以在不同體系結構的計算機上運行,也可以在虛擬機上運行,而無需在所有計算機上編譯,即僅在我的計算機上編譯後才能運行?如何在不編譯它的情況下在不同的體系結構上編譯相同的C代碼?
0
A
回答
2
「無法執行二進制文件」可能由許多不同的事情引起。如果體系結構真的不同,那麼除了重新編譯它(除了運行原始的操作系統和處理器體系結構的模擬器,但這是)或者將代碼重寫爲某種編譯中間形式(例如,可以編譯爲Java字節碼的Java本身可通過具有執行代碼的「Java虛擬機」進行移植。另一方面,如果問題在於二進制文件缺少一些依賴項 - 一些共享庫位於您的機器上,但不在您的朋友的機器上,那麼解決方案是安裝相應的庫(右側版)。或者使用靜態庫重新編譯,以便它不依賴於共享庫。
編譯C +或C++代碼的目的是生成一個可在特定OS /處理器架構上直接執行的二進制文件。 C和C++語言只能作爲源代碼而不是二進制可執行文件移植到其他操作系統/處理器軟件包中。
0
想象一下,你正在做一個100塊拼圖遊戲,你失去了一塊。所以你從一個不同的難題中偷了一塊,所以你會有100件。
問題是,新作品不是爲你的拼圖而製作的。它不適合。如果你已經從與你的完全相同的難題中獲得了你的第100張作品,它會奏效。 (「它在我的機器上運行」)
編譯器爲您的目標操作系統生成代碼。如果你是64位,那麼你的編譯器可能會默認創建一個64位的拼圖。如果你的朋友正在運行32位,那麼你的64位拼圖片將不適合他的拼圖。
告訴您的編譯器爲目標生成正確的代碼。
這個計算器的問題可能會幫助你走上正確的道路。如果沒有,如果寫得好改變代碼,,您可以更改編譯器標誌可以產生兩個不同的目標圖像(拼圖)
How do I create a single makefile for both 32- and 64-bit?
你的編譯器可能會尖叫各類取決於你如何寫警告你程序不依賴於OS中的位數。
如果你正在做跨平臺,那麼你將需要了解其他標誌。這是你學習的地方。
相關問題
- 1. 在不同編譯器上產生不同輸出的代碼
- 2. QString在相同的編譯(但不同的系統)上返回不同的sting
- 3. Scala代碼在不使用scalac編譯的情況下運行?
- 4. 如何在不添加不可達代碼的情況下編譯異步lambda?
- 5. C++:相同的代碼和編譯器,但每次構建後輸出不同
- 6. 在Windows上編譯C++/LapackE代碼很好,但是相同的代碼在Linux上編譯失敗
- 7. 編譯器如何交叉編譯到不同的操作系統和體系結構?
- 8. 編譯器可以在沒有擴展的情況下編譯代碼嗎?
- 9. C++與gcc和visual studio不同的編譯錯誤,'在這種情況下'
- 10. 如何在不編譯代碼的情況下修改全局資源DLL?
- 11. 如何在不安裝IDE的情況下編譯並運行此Delphi代碼?
- 12. 在沒有Visual Studio的情況下編譯Microsoft的LoginAdmin.dll代碼
- 13. 編譯不同的語言在Eclipse上
- 14. 如何在不編譯宏的情況下啓動excel?
- 15. 如何在不崩潰編譯器的情況下實現MutableCollectionType?
- 16. 如何在不重新編譯FLA的情況下更新SWF
- 17. 如何在不調試的情況下編譯PHP擴展?
- 18. 在不編輯的情況下添加編譯器選項Makefile
- 19. 如何在沒有主函數的情況下編譯C源代碼?
- 20. 相同的代碼,在不同的C編譯器中使用printf()和write()不同的打印順序
- 21. ffmpeg:相同的編譯在不同的機器上表現不同
- 22. 如何使用Scons在Glob的不同環境下編譯相同的對象?
- 23. 如何在不編譯的情況下運行一組相關的groovy腳本?
- 24. 任意體系結構的可編譯目標編譯器
- 25. 不能編譯C++的 「HelloWorld」 用gcc編譯器在Windows上的代碼塊
- 26. 結構不編譯?
- 27. 編譯器在Integer上的行爲不同。爲什麼下面的代碼在一種情況下會給編譯器帶來錯誤?
- 28. C代碼 - Pthread不編譯
- 29. 不能編譯代碼[C++]
- 30. C++代碼不能編譯
如果您使用交叉編譯器,您可以編譯您的程序用於不同的目標,但仍需要爲每個目標編譯它。 – melak47
您必須爲體系結構或C解釋器使用仿真器,該解釋器也涵蓋使用的庫函數。 – Olaf
編譯32位並安裝i386軟件包。 http://askubuntu.com/questions/454253/how-to-run-32-bit-app-in-ubuntu-64-bit –