【问题标题】:How to execute shell scripts from 32-bit Wine on 64-bit Linux?如何在 64 位 Linux 上从 32 位 Wine 执行 shell 脚本?
【发布时间】:2014-04-30 10:29:25
【问题描述】:

我的 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 位的 shell(和其他一些基本实用程序),也许是一个 schroot-ed 最小发行版(请参阅 debootstrap
  • 您是在使用winelib 来构建一个模拟Win32 API 的Linux 程序,还是在Wine 下运行PE 格式的Win32 可执行文件?第一个是编程问题,第二个更多是关于配置不是您开发的软件(Wine)的高级用户问题。
  • 我是开发人员,但它没有使用 winelib。该应用程序知道它何时在 Linux/Mac 上(通过 Wine)并利用 shell 脚本更好地与环境集成。

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


【解决方案1】:

我是相关程序的用户,我对它进行了一些试验。

不是 32 位与 64 位,而是“共享对象”与“可执行”?

运行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

上面提到的关于在schroot 环境中设置 32 位 shell 的 Basile Starynkevitch。我在 Ubuntu 14.04 32 位环境中做到了这一点,并在 dashbash “共享对象”与“可执行文件”中遇到了同样的问题(但当我将 /bin/bash 复制到 /bin/sh 时,它起作用了),所以这帮助我意识到区别不是 32 位和 64 位的区别,而是对 Wine 很重要的 shell 可执行文件的格式。

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

【讨论】:

  • 因此,如果我的应用程序只是调用 /bin/bash 来代替 /bin/sh,那么事情可能会“正常工作”,而无需对用户进行任何干预。我将不得不探索这个想法!我会报告我的发现!
  • 我更新了我的应用程序以调用 /bin/bash 而不是 /bin/sh,现在它在 Ubuntu 14.04 64 位 + Wine 上运行良好。 (它在 Mac OS X 10.6-10.9 + Wine 上仍然很好用)。感谢您对此的帮助!
猜你喜欢
  • 2020-03-22
  • 2012-11-26
  • 1970-01-01
  • 1970-01-01
  • 2012-03-12
  • 1970-01-01
  • 2018-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多