web-dev-qa-db-ja.com

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

14.04 タグに注意してください。 64ビットマシンで32ビットバイナリをコンパイルする際のトラブル に関する回答は古くなっています。また、 64ビットシステムで32ビットをコンパイル 回答を使用する./configureスクリプトはありません。

詳細

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ビルドに不可欠な依存関係を手動で検索する必要がありますか?

6
int_ua

はい、Ubuntuまたは追加したPPAにまだパッケージ化されていないものについては、コンパイルに必要なすべての依存関係を手動でインストールする必要があります。すでにUbuntuにパッケージ化されているものについては、apt-get build-dep $packageを実行できます。そのパッケージのビルド依存関係がインストールされますが、Ubuntuでビルドされたバージョンで使用された依存関係が追加または変更された場合、これらの追加または変更された依存関係を手動でインストールする必要があります。

5
dobey

AFAIU、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

1
int_ua