14.04.01 32 bits: fichiers d'inclusion g ++ 64 bits manquants lors de la compilation croisée

8

J'ai donc installé Xubuntu 14.04.1 32 bits. Nous avons du code d'interface où nous avons l'intention de publier des SO pour les différentes plates-formes que nous prenons en charge et des DLL Windows. (Oui, je sais, la version binaire est mauvaise, mais elle n'est pas non plus pertinente ici.)

J'essaie de créer des SO 32 bits et 64 bits avec 14.04.01 32 bits, en utilisant des arguments -m32/ -m64gcc / g ++. La version 32 bits fonctionne bien, mais la version 64 bits échoue avec

/usr/include/c++/4.8/string:38:28: fatal error: bits/c++config.h: No such file or directory

En vérifiant les inclusions, ce fichier est réellement présent pour 32 bits mais manquant pour 64 bits.

Googler le problème, cela semble être arrivé dans le passé pour GCC / G ++ 4.6, mais est ensuite marqué comme corrigé. Mais 14.04.1 utilise GCC / G ++ 4.8, ce qui suggère qu'il y a eu une régression dans ces bibliothèques dans GCC / G ++ 4.8. Est-ce quelque chose que quelqu'un d'autre a vu?

Je pourrais configurer une nouvelle VM pour 64 bits 14.04.1 si nécessaire et voir si cela prendrait les bonnes versions de bibliothèque. Je préfère ne pas le faire si possible, car j'ai un tas d'autres choses que je devrais également réinstaller. Y a-t-il une meilleure solution? Et si j'avais installé la version 64.04 14.04.1, serais-je définitivement capable de recompiler en 32 bits sans manquer d'en-têtes dans l'autre sens?

Graham
la source
... vous devriez peut-être éviter de mentionner des choses qui ne sont "pas pertinentes ici", car elles ne sont pas pertinentes.
mikewimporte
2
Avez-vous installé le g++-multilibpackage?
steeldriver
@steeldriver Merci - c'était tout! Il semble que l'installation 64 bits l'ait par défaut, mais pas l'installation 32 bits. OK, autre chose à ajouter à ma liste de contrôle "comment configurer une machine virtuelle de build Linux". :) Cela peut sembler basique, mais je n'ai pas repéré cela comme une réponse dans les questions des autres pour la même erreur de compilation, et je ne suis pas vraiment un expert Linux.
Graham

Réponses:

9

Le fichier config.h 64 bits / c ++ est fourni sur les systèmes 32 bits (et vice versa) en installant le g++-multilibpackage, vous devez donc installer ce package en utilisant Software Center, Synaptic ou via le terminal en utilisant

sudo apt-get install g++-multilib

Ceci est juste un package de dépendances qui se résout en version g++-4.8-multilibpar défaut gcc / g ++, et dépend à son tour de lib64stdc++-4.8-dev(compilation 64 bits sur 32 bits) ou libx32stdc++-4.8-dev(compilation 32 bits sur 64 bits) - ce sont ceux-ci qui contiennent le fichiers d'en-tête réels.

Il existe un ensemble équivalent de packages pour le compilateur C ordinaire gcc.

tournevis
la source
4
sudo apt-get install g++-5-multilibm'a donné la version dont j'avais besoin. Si cela ne fonctionne pas pour vous, la note sudo add-apt-repository ppa:ubuntu-toolchain-r/test && sudo apt-get updatefait également partie de ma config.
U007D