如何在64位Linux上从32位Wine执行shell脚本?

时间:2014-04-25 14:35:01

标签: linux sh 32bit-64bit wine ubuntu-14.04

我的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”,但找不到。关于如何解决这个问题的任何创意?

1 个答案:

答案 0 :(得分:2)

我是相关程序的用户,我做了一些实验。

不是32位而是64位但是#34;共享对象" vs."可执行文件" ?

正在运行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位shell

下拉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关于在schroot环境中设置32位shell。我使用Ubuntu 14.04 32位环境做到了这一点,并遇到dashbash"共享对象"相同的问题。 vs."可执行文件" (但是当我将/bin/bash复制到/bin/sh时,它已经工作了),这有助于我意识到区别不是32位与64位的区别,而是shell可执行文件的格式这对葡萄酒很重要。

如果您希望我可以发布有关设置schroot evnironment的详细信息,但基本上我按照https://help.ubuntu.com/community/DebootstrapChroot上的说明操作,但需要配置/etc/apt/sources.list以获取完整的软件包列表(安装在我的默认主机系统中)apt-get install wine可以正常工作。