是否建议从Cygwin 32bit切换到Cygwin 64bit?

刺柏

我使用Cygwin已有很长时间了。具体来说,我在Win7上使用它(包括gcc / g ++)进行开发工作。我刚刚注意到,现在存在一个64位版本

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

沃伦·杨(Warren Young)

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

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

  1. 许多Cygwin程序将使用尽可能多的RAM。

    例如,如果您将R的Cygwin版本用于大数据集,则应切换到64位Cygwin ASAP,因为R希望将整个数据集加载到RAM中,因此在64位上使用32位Cygwin机器人为地限制了R在Cygwin下可以完成的工作。

  2. Cygwin面对fork()调用时处理DLL的方式要求将它们加载到固定的内存地址。

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

    其结果之一是,有可能在32位Cygwin中安装太多rebase地址空间不足的软件包,试图为其提供所有唯一的加载地址。出于所有实际目的,64位地址空间的指数级增大现在消除了这种可能性。

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

您可以同时安装和运行两个版本的Cygwin。您甚至可以同时为每个菜单打开一个MinTTY窗口。但是,最好将它们视为独立的世界,因为两个Cygwin基本上是不兼容的如果试图让它们进行互操作,将会遇到麻烦。

这种根本的不兼容性可能会以多种方式咬住您:

  1. 即使64位Cygwin程序可以启动32位Cygwin程序,反之亦然,但是一些跨进程机制将无法跨越该边界:POSIX共享内存,文件句柄传递,getppid(2)...

  2. 当您尝试使两个不同的Cygwins进行互操作时,甚至某些您不认为是跨进程的事情也会失败。/proc例如,Cygwin的大部分内容都来自DLL,因此,即使两个Cygwin在同一台计算机上同时运行,它们也将有所不同。

  3. 假设您想/usr/local在Cygwin之间共享,那么您不必拥有从源代码构建的所有软件的两个副本。

    阅读以上第一项后,您意识到您无法共享/usr/local/bin/usr/local/lib

    在考虑之后,您决定只想共享,/usr/local/src这样至少不必有重复的源树。如果像通常那样在源代码树中构建任何这些程序,仍然会遇到问题。(即./configure && make && make install

    发生这种情况有两个原因:

    • 生成的二进制文件(*.o*.so*.a*.exe...)将两个Cygwins之间不兼容的,所以除非你make cleanCygwins之间切换时,他们会被抛在后面,造成混乱。

    • 即使您记得make clean./configure每个Cygwin下的输出可能也会有所不同,因此尝试在64位Cygwin下构建在32位Cygwin下配置的程序(反之亦然)可能会失败。

    有几种方法可以解决此陷阱:

    • 也放弃分享/usr/local/src

    • 切记make clean && ./configure每次切换Cygwins时都要记住

    • 构建构建出的树分别为每个Cygwin的变种。

      与以前的选项相比,它更清洁,更快且更可靠,但是并非所有源代码树都为此设置。

如果您没有充分的理由解决此类问题,请安装一个或另一个版本,而不要同时安装两个版本。

如果您具有可正常运行的32位Cygwin设置,并且不需要64位Cygwin的好处,则无需感觉必须将其替换为64位安装。32位Cygwin不会很快消失。

同时,如果我要安装一个新的64位Windows机器,则要在其上安装64位Cygwin,除非我事先知道它没有所需的移植端口,而且我不是愿意自己做港口。它是稳定的,而且基本上是完整的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

是否建议从Cygwin 32bit切换到Cygwin 64bit?

来自分类Dev

从Ubuntu 13.04 64bit切换到32bit

来自分类Dev

从Ubuntu 13.04 64bit切换到32bit

来自分类Dev

Cygwin / Windows 64bit上的堆栈大小是多少?

来自分类Dev

C ++ GetProcAddress 64bit返回32bit地址

来自分类Dev

卸载utorrent,在32bit上安装64bit

来自分类Dev

如何从文件夹结构/文件确定JRE是否为32 / 64bit

来自分类Dev

是否值得在Intel Atom上安装一些Debian UEFI 64bit

来自分类Dev

If a 32 bit CPU has a 64bit bus system, is it 64 bit or 32 bit?

来自分类Dev

Xcode:编译具有32bit库的64bit应用

来自分类Dev

通过Inno Setup中的Powershell脚本确定32bit / 64bit

来自分类Dev

如何将我的内核从32bit升级到64bit fedora

来自分类Dev

双启动(Windows 7 32bit和Ubuntu 14.04LTS 64bit)

来自分类Dev

Ketarin 64bit URL下载

来自分类Dev

使用Office 64bit的问题

来自分类Dev

Ubuntu随机冻结14.04 64bit

来自分类Dev

如何使用simple-cdd在64bit debian下同时制作32bit和64bit iso映像?

来自分类Dev

如果USB上已经有64bit,如何用Windows 10 32bit创建可启动USB

来自分类Dev

在Windows 8(64bit)中安装RRDtool

来自分类Dev

Segmentation fault on printf - NASM 64bit Linux

来自分类Dev

VS2012 64bit的LibPNG静态链接

来自分类Dev

如何在Windows上构建gettext 64bit dll。

来自分类Dev

Moving a label into 64bit register - inline assembly (GCC / CLANG)

来自分类Dev

printf上的分段错误-NASM 64bit Linux

来自分类Dev

右上角的图标弄乱了Ubuntu 13.04 64bit

来自分类Dev

安装的字体未显示,Linux Mint 15 64bit

来自分类Dev

无法在Windows 8 64bit下安装Android Studio

来自分类Dev

无法安装Win 7 64Bit。关于GPT磁盘

来自分类Dev

Windows 8 64bit上的FileZilla 3.7.2

Related 相关文章

热门标签

归档