代码之家  ›  专栏  ›  技术社区  ›  c-urchin

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

  •  1
  • c-urchin  · 技术社区  · 16 年前

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

    5 回复  |  直到 16 年前
        1
  •  6
  •   Yann Ramin    16 年前

    甚至 setjmp longjmp 应该能正常工作。在用户空间应用程序中,不会出现任何问题。实际的32位仿真由处理器完成。系统调用是返回64位内核的接口,Linux可以正确处理该接口。

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

        2
  •  3
  •   bjg    16 年前

    对于运行在64位系统上的32位应用程序来说,最大的问题是编程人员错误地假设了整数或指针长度,然后用它们做了不可移植的事情。对于C/C++程序员考虑的问题有一个很好的概述。 this article 太阳报

        3
  •  1
  •   Edward Strange    16 年前

        4
  •  1
  •   caf    16 年前

    在64位Linux下运行32位应用程序时,如果您有必要的32位库,那么实际上只会出现两个问题:

    • 一些 ioctl()

    • 已硬编码的应用程序 /usr/lib 和/或 /lib 如果32位库位于其他位置,则搜索动态库的路径将不起作用。

        5
  •  0
  •   pankajt    16 年前

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

    2. 数据类型大小的差异

    请参考:

    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

    也许这就是你要找的!