是什么让32位应用程序与64位Linux操作系统不兼容?

时间:2010-07-01 18:34:30

标签: c++ linux 32bit-64bit

似乎大多数32位应用程序将在64位Linux上运行,假设所有32位库都存在。但在我看来,可能存在与体系结构相关的函数的问题,在这里我正在考虑信号和setjmp / longjmp。我想知道具有更多经验的人是否可以评论哪些功能(如果有的话)会导致32位应用程序与64位操作系统不兼容。

5 个答案:

答案 0 :(得分:6)

即使setjmplongjmp也能正常运作。来自用户空间应用程序的任何问题都没有特别的问题。实际的32位仿真由处理器完成。系统调用是返回64位内核的接口,Linux正确处理。

如果应用程序是邪恶的,并将可执行代码发送到另一个64位进程来执行,那么各种事情都会破坏。

答案 1 :(得分:3)

在64位系统上运行的32位应用程序的最大问题是程序员错误地对整数或指针长度做出假设,然后用它们做不可移植的事情。对于C / C ++程序员在Sun {/ 3}}中要考虑的问题有一个非常好的概述

答案 2 :(得分:1)

如果在没有32位传统支持的情况下编译Linux,那么32位程序将无法正常运行。

答案 3 :(得分:1)

假设您拥有必要的32位库,在64位Linux下运行32位应用程序时只会出现两个问题:

  • 在64位内核上由32位用户进程使用时,较少使用的驱动程序的某些ioctl()无法正常工作;

  • 如果32位库位于其他位置,那么具有用于搜索动态库的硬编码/usr/lib和/或/lib路径的应用程序将无效。

答案 4 :(得分:0)

让我们举一个32位应用程序的例子,它有一个主模块并加载一个32位相关的dll。如果要迁移主模块以及32位相关的dll,应用程序在64位计算机上运行正常。但是如果你只迁移主模块,它将无法从64位机器加载64位相关的dll,即使存在。 原因是 -

  
      
  1. 数据存储器的不同对齐

  2.   
  3. 数据类型大小的差异

  4.   

请参阅:

  

http://dev-faqs.blogspot.com/2008/03/accessing-32-bit-dlls-from-64-bit-code_02.html

     

http://dnjonline.com/article.aspx?ID=jun07_access3264

可能这就是你要找的东西!