为什么应用程序必须在目标机上才能运行?

hkcarlos 2012-02-17 03:15:07
宿主机是ubuntu,目标机是开发板。我在宿主机上写好程序,make后,如果直接运行就会报错。
armcomtest是程序名称。
android@ubuntu:~/work/FriendlyARM/linux-2.6.32.2/examples/comtest$ ./armcomtest
bash: ./armcomtest: cannot execute binary file

下载到开发板上运行,没问题。

请教这是为什么?
...全文
42 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
hkcarlos 2012-02-17
  • 打赏
  • 举报
回复
爱死你们了
Liv2005 2012-02-17
  • 打赏
  • 举报
回复
同1L
比喻起来就好像在利比亚地区说中文...大家都不懂
同理,在x86主机上运行arm程序...自然也不行...
__linux__ 2012-02-17
  • 打赏
  • 举报
回复
你的make中调用的是什么编译工具呢?如果是交叉编译工具,那么编译出的程序应该是针对开发板(Arm)的吧。在宿主机(x86)上肯定不能运行。

如果你在宿主机上直接用gcc编译一下(不用make命令),看看编译出的程序是否可以在宿主机上运行。
一、什么是JVM  JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。 JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行目标代码(字节码),就可以在多种平台上不加修改地运行。JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。  Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。这就是Java的能够“一次编译,到处运行”的原因。二、JVM的组成我们先把JVM这个虚拟机画出来,如下图所示:从这张图中我们可以看出,JVM是运行在操作系统之上的,它与硬件没有直接的交互,我们再来看JVM由哪些部分组成,如下图所示:

4,441

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧