如何安装 build-essential:i386 以在 64 位系统上编译 32 位可执行文件?

如何安装 build-essential:i386 以在 64 位系统上编译 32 位可执行文件?

apt-get install build-essential:i386根本不起作用:

The following packages have unmet dependencies:
 build-essential:i386 : Depends: gcc:i386 (>= 4:4.4.3) but it is not going to be installed
                        Depends: g++:i386 (>= 4:4.4.3) but it is not going to be installed

注意标签。答案 在 64 位机器上编译 32 位二进制文​​件时遇到问题 已经过时了。此外,没有./configure脚本可以使用在 64 位系统上编译 32 位回答。

更多细节

我正在尝试从 quietust 分支完成 DFHack:https://github.com/quietust/dfhack/

apt-get install gcc-multilib g++-multilib删除了

CMake Error at depends/protobuf/CMakeLists.txt:60 (MESSAGE):
  Could not find a working hash map implementation.  Please install GCC >=
  4.4, and all necessary 32-bit C++ development libraries.

消息,但是

-- Could NOT find Threads (missing:  Threads_FOUND) 
Can't locate XML/LibXML.pm in @INC (you may need to install the XML::LibXML module) (@INC contains: /etc/perl /usr/local/lib/perl/5.18.2 /usr/local/share/perl/5.18.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.18 /usr/share/perl/5.18 /usr/local/lib/site_perl .) at xml/list.pl line 6.
BEGIN failed--compilation aborted at xml/list.pl line 6.

仍然存在。我是否必须手动寻找所有 i386 build-essential 依赖项?

答案1

是的,对于尚未在 Ubuntu 中打包或在您添加的 PPA 中打包的任何内容,您必须手动安装编译所需的所有依赖项。对于已在 Ubuntu 中打包的任何内容,您可以运行它,apt-get build-dep $package它将安装该包的构建依赖项,但是,如果与 Ubuntu 构建版本中使用的依赖项相比存在任何附加或更改的依赖项,您仍需要手动安装这些附加或更改的依赖项。

答案2

据我所知,在 64 位系统上编译 32 位可执行文件的最佳方法是按照以下方式创建 chroot(您可能需要用xenial所需的代号替换):

mk-sbuild --arch=i386 xenial # Currently, first time it needs to be executed twice, unfortunately, please comment if you know how to omit this.
mk-sbuild --arch=i386 xenial

# Allowing the same home folder to be used
echo "$HOME                 /home/$USER  none  rw,bind  0  0" | sudo tee -a /etc/schroot/sbuild/fstab

然后你就可以使用 chroot

schroot -c xenial-i386

请注意,默认情况下它没有 sudo,你必须使用以下命令进行管理

sudo schroot -c source:xenial-i386 -u root

在这个答案中找到了想法https://askubuntu.com/a/216670/20275

相关内容