211 votes

Manquant inclure des "bits/c++config.h" lors de la compilation croisée 64 bits du programme sur la 32 bits de Ubuntu

Je suis sous la version 32 bits de Ubuntu 10.10 et en essayant de traverser les compiler en 64 bits cible. Basé sur mes recherches, j'ai installé le g++-multilib paquet.

Le programme est très simple bonjour tout le monde:

#include <iostream>

int main( int argc, char** argv )
{
  std::cout << "hello world" << std::endl;
  return 0;
}

Compiler:

g++ -m64 main.cpp

Erreur:

In file included from main.cpp:1:
/usr/include/c++/4.4/iostream:39: fatal error: bits/c++config.h: No such file or directory
compilation terminated.

J'ai trouvé un c++config.h le fichier mais ils résident en vertu de l' i486-linux-gnu et i686-linux-gnu annuaires /usr/include/c++/4.4/ Il n'y a pas d' c++config.h en /usr/include/c++/bits.

Toutes les idées sur ce que je suis absent? Compilation sans l' -m64 drapeau fonctionne très bien (un.est créé et fonctionne correctement).

Modifier Grâce à l'indice de @nightcracker, j'ai fait un peu plus d'enquête sur la structure include sur la 32 bits et 64 bits des systèmes. J'ai ajouté une réponse ci-dessous qui "résout" le problème temporairement, mais je pense qu'il va briser sur la prochaine mise à jour. En gros, il me manque un répertoire appelé /usr/include/c++/4.4/i686-linux-gnu/64 que doit contenir un sous-répertoire appelé bits qui a le manque d'inclure le fichier. Toute idée de ce paquet devrait être de prendre soin de cela?

355voto

Anthony Sottile Points 3629

L'ajout de cette réponse, en partie parce qu'il a fixé mon problème de la même question et j'ai donc pouvez ajouter un signet à cette question moi-même.

J'ai été en mesure de le réparer en effectuant les opérations suivantes:

sudo apt-get install gcc-4.7-multilib g++-4.7-multilib

13voto

nightcracker Points 34498

Avez-vous essayez d'ajouter de l' -I/usr/include/c++/4.4/i486-linux-gnu ou -I/usr/include/c++/4.4/i686-linux-gnu?

7voto

Pekmez Points 21

Lors de la compilation dans RHEL 6.2 (x86_64), j'ai installé la fois 32 bits et 64 bits libstdc++-dev paquets, mais j'ai eu le "c++config.h aucun fichier ou répertoire" problème.

Résolution:

Le répertoire /usr/include/c++/4.4.6/x86_64-redhat-linux était manquant.

J'ai fait la suivante:

cd /usr/include/c++/4.4.6/
mkdir x86_64-redhat-linux
cd x86_64-redhat-linux
ln -s ../i686-redhat-linux 32

Je suis maintenant en mesure de compiler en 32 bits binaires sur un OS 64 bits.

3voto

DanceDance Points 11

Semble être une faute de frappe erreur dans le paquet de gcc. La solution:

mv /usr/include/c++/4.x/i486-linux-gnu /usr/include/c++/4.x/i686-linux-gnu/64

2voto

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X