web-dev-qa-db-fra.com

Comment installer build-essential: i386 pour compiler un exécutable 32 bits sur un système 64 bits?

apt-get install build-essential:i386 ne fonctionne pas du tout:

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

Notez la balise 14.04 . Les réponses sur Problème lors de la compilation d'un fichier binaire 32 bits sur une machine 64 bits sont obsolètes. De plus, il n'y a pas de script ./configure pour utiliser la réponse Compiler 32 bits sur un système 64 bits .

Plus de détails

J'essaie de compléter DFHack depuis la branche quietust: https://github.com/quietust/dfhack/

apt-get install gcc-multilib g++-multilib a supprimé le

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.

message, mais

-- 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.

est toujours là. Dois-je rechercher manuellement toutes les dépendances au format i386?

6
int_ua

Oui, pour tout ce qui n'est pas déjà packagé dans Ubuntu ou dans un PPA que vous avez ajouté, vous devrez installer manuellement toutes les dépendances nécessaires à sa compilation. Pour tout ce qui est déjà empaqueté dans Ubuntu, vous pouvez exécuter apt-get build-dep $package et il installera les dépendances de construction de ce paquet. Toutefois, s'il existe des dépendances supplémentaires ou modifiées par rapport à celles utilisées dans la version intégrée d'Ubuntu, vous devrez toujours installer manuellement ces dépendances supplémentaires ou modifiées.

5
dobey

AFAIU, un moyen optimal de compiler un exécutable 32 bits sur un système 64 bits consiste à créer un chroot de la manière suivante (vous pouvez éventuellement remplacer xenialpar un nom de code requis):

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

Ensuite, vous pouvez utiliser le chroot avec juste

schroot -c xenial-i386

Notez qu’il n’aura pas de Sudo par défaut, vous devrez le gérer avec

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

Idée trouvée dans cette réponse https://askubuntu.com/a/216670/20275

1
int_ua