gpt4 book ai didi

cygwin - 是否建议从 Cygwin 32 位切换到 Cygwin 64 位?

转载 作者:行者123 更新时间:2023-12-03 05:45:50 26 4
gpt4 key购买 nike

我一直在用 Cygwin (许久)。具体来说,我在Win7上使用它(包括gcc/g++)进行开发工作。我最近才注意到现在存在一个 64-bit version .

我没有特定的需求要求我过渡到 64 位,但我想知道是否要这样做。是否可取?优缺点都有什么?进行过渡时是否存在已知的过弧问题?

最佳答案

曾几何时,64 位 Cygwin 缺少 32 位 Cygwin 中存在的许多软件包,但今天 the list of such packages很短。由于这是在 64 位 Windows 系统上创建新的 32 位 Cygwin 安装的最后一个重要原因,因此您今天不太可能有充分的理由这样做。

使用 64 位 Cygwin 的最大优势是可以访问更多内存。优势有两种截然不同的表现方式:

  • 许多 Cygwin 程序会尽可能多地使用 RAM。

    如果您使用的是 R 的 Cygwin 版本例如,对于大型数据集,您应该尽快切换到 64 位 Cygwin,因为 R 想要将整个数据集加载到 RAM 中,因此在 64 位机器上使用 32 位 Cygwin 人为地限制了 R 在 Cygwin 下可以完成的工作。
  • Cygwin 面对 fork() 处理 DLL 的方式调用要求将它们加载到固定的内存地址。

    (这是 rebase mechanism ,通常在 Cygwin 的 setup.exe 每次运行结束时自动运行。)

    这样做的一个后果是,在 32 位 Cygwin 中可能安装如此多的软件包,以至于 rebase用尽地址空间试图给他们所有唯一的加载地址。出于所有实际目的,64 位地址空间的指数级大小现在消除了这种可能性。

  • 在某些情况下,64 位 Cygwin 也可以更快一点。

    您可以同时安装和运行两个版本的 Cygwin。您甚至可以同时为每个 up 设置一个 MinTTY 窗口。尽管如此,最好将它们视为独立的世界,因为两个 Cygwins 是 fundamentally incompatible .如果您试图让它们进行互操作,则会遇到麻烦。

    这种根本的不兼容性会以多种方式影响您:
  • 尽管 64 位 Cygwin 程序可以启动 32 位 Cygwin 程序,反之亦然,但一些跨进程机制将无法跨越该边界工作:POSIX 共享内存、文件句柄传递、getppid(2) ...
  • 当您尝试使两个不同的 Cygwin 互操作时,即使您不认为是跨进程的某些事情也会失败。 Cygwin 的大部分内容/proc例如,来自 DLL 内部,因此两个 Cygwin 之间会有所不同,即使它们在同一台机器上同时运行。
  • 说你想分享 /usr/local Cygwins 之间,因此您不必拥有从源代码构建的所有软件的两个副本。

    看完上面的第一条,你意识到你不能分享/usr/local/bin/usr/local/lib .

    经过深思熟虑,您决定只想分享 /usr/local/src这样你至少不必有重复的源树。如果您在源代码树中构建任何这些程序,您仍然会遇到问题,这是典型的。 (即 ./configure && make && make install )

    发生这种情况有两个原因:
  • 生成的二进制文件( *.o*.so*.a*.exe ...)将在两个 Cygwin 之间不兼容,因此除非您 make clean在 Cygwin 之间切换时,它们将被抛在后面,造成困惑。
  • 即使你记得make clean./configure的输出在每个 Cygwin 下可能会有所不同,因此尝试在 64 位 Cygwin 下构建在 32 位 Cygwin 下配置的程序(反之亦然)可能会失败。

  • 有几种方法可以摆脱这个陷阱:
  • 放弃分享 /usr/local/src , 也。
  • 记得要make clean && ./configure每当您切换 Cygwins 时。
  • 构建 build out-of-tree分别用于每个 Cygwin 变体。

    这比前一个选项更干净、更快、更可靠,但并非所有源树都设置为允许这样做。

  • 如果您没有充分的理由忍受这些问题,请安装一个或另一个版本,而不是同时安装两个版本。

    如果您有一个正常运行的 32 位 Cygwin 安装程序并且不需要 64 位 Cygwin 的好处,那么您不必觉得必须用 64 位安装来替换它。 32 位 Cygwin 不会很快消失。

    同时,如果我要设置一个新的 64 位 Windows 机器,我会在它上面安装 64 位 Cygwin,除非我事先知道它没有移植我需要的包,而且我没有愿意自己做端口。它是稳定的并且大部分是完整的。

    关于cygwin - 是否建议从 Cygwin 32 位切换到 Cygwin 64 位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18329233/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com