是否可以在64位安装中运行32位Cygwin应用程序?
动机:正如Where's the rxvt-native utility gone in cygwin 1.7.26 for 64bit windows?中所讨论的,rxvt-native
,我最喜欢的Windows终端模拟器,目前在64 Cygwin中不可用。我希望就像我可以在64位Linux发行版上运行32位Linux应用程序一样,也许我可以在64位Cygwin上运行32位rxvt。
我已尝试将可执行文件从旧PC的C:\cygwin\bin
目录复制到新PC的C:\cygwin64\usr\local\bin
目录,但无法运行。
当我运行进程时,它只是默默地什么也不做。ldd
告诉我缺少一些依赖项:
$ ldd /usr/local/bin/rxvt-native.exe
ntdll.dll => /cygdrive/c/Windows/SYSTEM32/ntdll.dll (0x7ffcb79b0000)
??? => ??? (0x77a10000)
wow64.dll => /cygdrive/c/Windows/System32/wow64.dll (0x62c20000)
wow64win.dll => /cygdrive/c/Windows/System32/wow64win.dll (0x62c80000)
我试过从我的32位系统复制cygwin1.dll
文件,但我不知道如何使它只对这个进程可用,而不对其他进程隐藏64位文件。
我的下一个选择是卸载我的64位cygwin,并重新开始与32位变种,但我仍然希望有一种方法...感谢您可以提供的任何帮助。
2条答案
按热度按时间aoyhnmkz1#
与任何 * Nix * 发行版一样,* Cygwin64 * 模拟器允许运行 * 32位 ( pc032 *)可执行文件(只要它们兼容)。您只需要:
首先,您需要安装***Cygwin32***包(至少):
由于我没有您的 * pc032 * 可执行文件(我不喜欢搜索下载、解压缩等),我创建了一个小示例(要使其运行,您还需要 * GCC * 工具链-我有这些工具链用于其他目的,但无论如何这与问题无关),它重现了该行为。
正如您所看到的,我在 * exe-gcc-032.exe * 中遇到了完全相同的问题。??? 依赖项是(* pc032 ) cygwin1.dll *。让我们来研究一下这个问题:
因此,* pc032**. dll * 存在(由上述软件包安装),但无法找到,因为其 * dir * 不在 * PATH * 中(* env**var *-由于其内容长度,无法立即看到)。
请注意,Cygwin * 在此场景中不支持 * LD_LIBRARY_PATH。
显而易见的步骤是让系统知道这个 *. dll *,方法是在 * PATH * 中添加它的 * dir *(在开头):
给你。
最后注解:
也可能经历:
更新 *#0 *
我添加了
system("echo ${PATH}");
(以及隐式#include <stdlib.h>
),在 * pc032 * 变量上,* System * 返回***127***(就像 * exe-gcc-032.exe * 在没有正确路径时的退出代码一样)。我怀疑这两个不可能没有关系,环境发生了一些事情,当启动 * pc032 * 应用程序时,并且 * rxvt-native. exe * 可能尝试通过 * 系统 *([Man7]: SYSTEM(3))启动 * Bash *(或任何其他命令)。更新 *#1 *
因此,可以从 * Cygwin64*运行 * pc032 * 应用程序(简单检查一下,没有发现任何官方来源表明这是一个 * 不支持的配置 *)。但是在这个特殊的例子中,由于应用程序很复杂(它是一个终端,需要运行多个其他应用程序),所以有一个问题。可能的方法(有些是其他人建议的)进一步:
SSh:我没有检查关于在同一台机器上并行运行的2 * SShD * 的限制,但是如果没有任何限制,您应该更改其中一个的默认侦听端口( 22 *)。我建议对前者进行更改,以便后者可以使用默认设置从"外部"访问
yqkkidmi2#
不,你不能。
32位应用程序需要32位cygwin1.dll,而64位cygwin需要64位cygwin1.dll。
rxvtwin32本机被mintty替换,它是缺省的cygwin终端