我的 32 位应用程序在 Wine 下运行,为了帮助它更好地与环境集成,它运行了一些 shell 脚本。我刚刚在 Ubuntu 14.04 64 位下进行测试,我的程序因以下错误而崩溃:
err:process:create_process starting 64-bit process L"Z:\\bin\\sh" not supported in 32-bit wineprefix
我尝试在我的系统上搜索 32 位版本的“sh”,但找不到。关于如何解决这个问题的任何创意?
我的 32 位应用程序在 Wine 下运行,为了帮助它更好地与环境集成,它运行了一些 shell 脚本。我刚刚在 Ubuntu 14.04 64 位下进行测试,我的程序因以下错误而崩溃:
err:process:create_process starting 64-bit process L"Z:\\bin\\sh" not supported in 32-bit wineprefix
我尝试在我的系统上搜索 32 位版本的“sh”,但找不到。关于如何解决这个问题的任何创意?
我是相关程序的用户,我做了一些实验。
运行file /bin/dash
它会打印:
/bin/dash: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), ...
但是运行file /bin/bash
打印:
/bin/bash: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), ...
dash
是“共享对象”,bash
而是“可执行文件”。显然/bin/dash
,在某些方面似乎像可执行文件一样工作(我不知道这里的技术细节),但似乎这种差异对 Wine 很重要。
我收到了与您报告的 Wine 1.4 相同的错误(无法启动 64 位进程),但我在较新版本的 Wine 上遇到的错误是wine: Bad EXE format for Z:\bin\sh..
如果您实际上只是替换/bin/sh
为/bin/bash
(即使那是 64 位二进制文件),它将起作用。Wine 似乎也不喜欢运行符号链接,但复制/bin/bash
工作。
所以首先备份现有的(符号链接的)/bin/sh
:
sudo cp /bin/sh /bin/sh_orig
然后复制bash
到sh
:
sudo cp /bin/bash /bin/sh
然后,当我使用该程序运行 Wine 时,它的调用/bin/sh
工作正常。
下拉 32 位 bash shell 的 .deb 文件:
wget http://us.archive.ubuntu.com/ubuntu/pool/main/b/bash/bash_4.3-6ubuntu1_i386.deb
我是您的主目录,将其解压缩到一个文件夹中:
mkdir ~/bash_4.3-6ubuntu1_i386
dpkg -x bash_4.3-6ubuntu1_i386.deb ~/bash_4.3-6ubuntu1_i386
将 bash 脚本复制到 /bin/sh:
sudo mv /bin/sh /bin/sh64original
sudo cp ~/bash_4.3-6ubuntu1_i386/bin/bash /bin/sh
sudo chown root:root /bin/sh
schroot
,但仍必须将 /bin/bash 复制到 /bin/sh上面提到的 Basile Starynkevitch 关于在环境中设置 32 位 shell schroot
。我在 Ubuntu 14.04 32 位环境中做到了这一点,并遇到了dash
与bash
“共享对象”与“可执行文件”相同的问题(但当我复制/bin/bash
到/bin/sh
它时),所以这帮助我意识到区别不是' t 32 位与 64 位的区别,但 shell 可执行文件的格式对 Wine 很重要。
如果您愿意,我可以发布设置环境的详细信息,schroot
但基本上我按照https://help.ubuntu.com/community/DebootstrapChroot上的说明进行操作,但需要配置/etc/apt/sources.list
完整的软件包列表(如安装在我的默认主机系统)apt-get install wine
才能工作。