web-dev-qa-db-fra.com

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

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

J'essaie de créer des SO 32 bits et 64 bits avec 14.04.01 32 bits, en utilisant les arguments -m32/-m64 gcc/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 inclus, 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 étant corrigé. Mais 14.04.1 utilise GCC/G ++ 4.8, ce qui suggère 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 un nouveau VM pour 14.04.1 64 bits si nécessaire et voir si cela permettrait de choisir les bonnes versions de bibliothèque. Cependant, je préférerais que cela ne soit pas possible, car il me faut également réinstaller d'autres éléments. Y a-t-il une meilleure solution? Et si j’installais la 14.04.1 64 bits, pourrais-je définitivement recompiler en 32 bits sans manquer d’en-têtes dans l’autre sens?

8
Graham

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

Sudo apt-get install g++-multilib

Ceci est juste un paquet de dépendance qui résout g++-4.8-multilib pour la version par défaut de gcc/g ++, et dépend à son tour de lib64stdc++-4.8-dev (compilation 64 bits sur 32 bits) ou de libx32stdc++-4.8-dev (compilation 32 bits sur 64 bits) - ce sont ces qui contiennent les fichiers d'en-tête réels.

Il existe un ensemble équivalent de packages pour le compilateur en clair C gccname__.

9
steeldriver