我写了一个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. 如何在不编译源代码的情况下安装Numpy
- 2. 在不同编译器上产生不同输出的代码
- 3. 在Linux上为不同的平台编译C/C++源代码
- 4. Scala代码在不使用scalac编译的情况下运行?
- 5. QString在相同的编译(但不同的系统)上返回不同的sting
- 6. 如何在不添加不可达代码的情况下编译异步lambda?
- 7. C++:相同的代码和编译器,但每次构建后输出不同
- 8. 在Windows上编译C++/LapackE代码很好,但是相同的代码在Linux上编译失败
- 9. 在不同的编译单元中编译具有不同编译标志的相同头文件
- 10. 编译器如何交叉编译到不同的操作系统和体系结构?
- 11. 给定的C代码如何解释不同的编译器
- 12. 如何在不重构的情况下编写此代码?
- 13. 编译器可以在没有扩展的情况下编译代码吗?
- 14. 代码在Eclipse中编译,但相同的代码不能在新的Android Studio中编译
- 15. C++与gcc和visual studio不同的编译错误,'在这种情况下'
- 16. 如何在不编译代码的情况下修改全局资源DLL?
- 17. 如何在不安装IDE的情况下编译并运行此Delphi代码?
- 18. 在没有Visual Studio的情况下编译Microsoft的LoginAdmin.dll代码
- 19. C/C++用不同的编译器编译程序的不同部分
- 20. 编译不同的语言在Eclipse上
- 21. 如何在不崩溃编译器的情况下实现MutableCollectionType?
- 22. 如何在不调试的情况下编译PHP扩展?
- 23. 如何在不看文件的情况下编译.sass
- 24. 如何在不编译宏的情况下启动excel?
- 25. 如何在不重新编译FLA的情况下更新SWF
- 26. 如何在不使用Visual Studio的情况下编译DLL?
- 27. 在不同平台上编译的编译器指令
- 28. 在不编辑的情况下添加编译器选项Makefile
- 29. 如何编译相同的源代码生成不同的目标文件?
- 30. 如何在没有主函数的情况下编译C源代码?
如果您使用交叉编译器,您可以编译您的程序用于不同的目标,但仍需要为每个目标编译它。 – melak47
您必须为体系结构或C解释器使用仿真器,该解释器也涵盖使用的库函数。 – Olaf
编译32位并安装i386软件包。 http://askubuntu.com/questions/454253/how-to-run-32-bit-app-in-ubuntu-64-bit –