Windows 能否在64位安装中运行32位Cygwin应用程序?

Windows 能否在64位安装中运行32位Cygwin应用程序?,windows,cygwin,32bit-64bit,rxvt,Windows,Cygwin,32bit 64bit,Rxvt,是否可以在64位安装中运行32位Cygwin应用程序 动机:如中所述,rxvt native,我最喜欢的Windows终端模拟器,目前在64 Cygwin中不可用。我希望就像我可以在64位Linux发行版上运行32位Linux应用程序一样,也许我可以在64位Cygwin上运行32位rxvt 我已尝试将可执行文件从旧电脑的C:\cygwin\bin目录复制到新电脑的C:\cygwin64\usr\local\bin目录,但无法运行 当我运行这个进程时,它只是默默地什么也不做 ldd告诉我缺少一些依

是否可以在64位安装中运行32位Cygwin应用程序

动机:如中所述,
rxvt native
,我最喜欢的Windows终端模拟器,目前在64 Cygwin中不可用。我希望就像我可以在64位Linux发行版上运行32位Linux应用程序一样,也许我可以在64位Cygwin上运行32位rxvt

我已尝试将可执行文件从旧电脑的
C:\cygwin\bin
目录复制到新电脑的
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位变体,但我仍然希望有一种方法。。。感谢您提供的任何帮助。

不,您不能。
32位应用程序需要32位cygwin1.dll,而 64位cygwin需要64位cygwin1.dll

rxvt win32 native被mintty取代,mintty是默认的cygwin终端

与任何Lnx发行版一样,cygwin 64 emulator允许运行32位可执行文件(只要它们兼容)。您只需具备以下任一项:

  • 安装了正确的软件包
  • 正确的.dll位于正确的位置(正如您所提到的),但是手动复制它们(尤其是在系统位置)既不能扩展,也不能保证系统在以后能够正常工作
首先,您需要安装cygwin32软件包(至少):

由于我没有您的32位可执行文件(我不喜欢搜索、下载、解包等…),所以我创建了一个小示例(为了使其运行,您还需要gcc工具链-我有用于其他目的的工具链,但无论如何,这与问题无关)来重现该行为

代码c:

#包括
int main(){
printf(“\”void*\”为%d位长。\n“,sizeof(void*)*8);
返回0;
}
输出

[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]>uname-a
CYGWIN_NT-10.0 cfati-5510-0 2.11.2(0.329/5/3)2018-11-08 14:34 x86_64 CYGWIN
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]>ls
代码c
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]>x86_64-pc-cygwin-gcc.exe-o exe-gcc-064.exe code.c
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]>i686-pc-cygwin-gcc.exe-o exe-gcc-032.exe代码。c-m32
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]>ls-al
总数433
drwxrwx---+1管理员无1月16日12:45。
drwxrwx---+1管理员无0 1月16日10:33。。
-rwxrwx---+1管理员无118 Jan 16 10:39代码c
-RWXR-x+1 cfati None 151062 Jan 16 12:45 exe-gcc-032.exe
-RWXR-x+1 cfati None 157755 Jan 16 12:45 exe-gcc-064.exe
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]>
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]>文件exe-gcc-064.exe
exe-gcc-064.exe:PE32+可执行文件(控制台)x86-64,适用于MS Windows
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]>ldd exe-gcc-064.exe
ntdll.dll=>/cygdrive/c/WINDOWS/SYSTEM32/ntdll.dll(0x7ffcaf990000)
KERNEL32.DLL=>/cygdrive/c/WINDOWS/System32/KERNEL32.DLL(0x7ffcaf300000)
KERNELBASE.dll=>/cygdrive/c/WINDOWS/System32/KERNELBASE.dll(0x7ffcabe60000)
cygwin1.dll=>/usr/bin/cygwin1.dll(0x180040000)
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]>。/exe-gcc-064.exe
“void*”的长度为64位。
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]>
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]>文件exe-gcc-032.exe
exe-gcc-032.exe:PE32可执行文件(控制台)英特尔80386,适用于MS Windows
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]>ldd exe-gcc-032.exe
ntdll.dll=>/cygdrive/c/WINDOWS/SYSTEM32/ntdll.dll(0x7ffcaf990000)
??? => ??? (0x77150000)
wow64.dll=>/cygdrive/c/WINDOWS/System32/wow64.dll(0x7ffcaf800000)
wow64win.dll=>/cygdrive/c/WINDOWS/System32/wow64win.dll(0x7ffcad570000)
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]>。/exe-gcc-032.exe
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]>
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]>echo$?
127
如您所见,我遇到了与exe-gcc-032.exe完全相同的问题。这个依赖项是32位cygwin1.dll。让我们来探讨这个问题:

[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]>find/usr-名称为cygwin1.dll
/usr/i686 pc cygwin/sys root/usr/bin/cygwin1.dll
/usr/bin/cygwin1.dll
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]>cygcheck-f/usr/bin/cygwin1.dll
cygwin-2.11.2-1
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]>file/usr/bin/cygwin1.dll
/usr/bin/cygwin1.dll:PE32+可执行文件(dll)(控制台)x86-64,适用于MS Windows
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]>
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]>cygcheck-f/usr/i686 pc cygwin/sys root/usr/bin/cygwin1.dll
cygwin32-2.10.0-1
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]>file/usr/i686 pc cygwin/sys root/usr/bin/cygwin1.dll
/usr/i686 pc cygwin/sys root/usr/bin/cygwin1.dll:PE32可执行文件(dll)(控制台)英特尔80386(剥离到外部PDB),适用于MS Windows
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]>
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q054206577]>echo${PATH}
/美国