似乎大多数32位应用程序将在64位Linux上运行,假设所有32位库都存在。但在我看来,可能存在与体系结构相关的函数的问题,在这里我正在考虑信号和setjmp / longjmp。我想知道具有更多经验的人是否可以评论哪些功能(如果有的话)会导致32位应用程序与64位操作系统不兼容。
答案 0 :(得分:6)
即使setjmp
和longjmp
也能正常运作。来自用户空间应用程序的任何问题都没有特别的问题。实际的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,即使存在。 原因是 -
数据存储器的不同对齐
- 醇>
数据类型大小的差异
请参阅:
http://dev-faqs.blogspot.com/2008/03/accessing-32-bit-dlls-from-64-bit-code_02.html
可能这就是你要找的东西!