MinGW g++ n'est pas de trouver les en-têtes dans son propre répertoire
Donc, j'ai récemment installé MinGW via la dernière version de nuwen de MinGW distribution qui comprend les bibliothèques boost C++. Plus précisément, j'ai été après la scoped_ptr que la bibliothèque boost fournit. Cependant, lorsque j'essaie d'inclure le scoped_ptr (#include <boost/scoped_ptr.hpp>
) dans l'en-tête, le compilateur renvoie
error: boost/scoped_ptr.hpp: No such file or directory
Makefile:
compile:
g++ -o gen/cavestory src/**.cc
run:
gen/cavestory
Aussi, j'ai ajouté une version de SDL répertoire include de MinGW sous SDL/**. Tous les fichiers d'en-tête sont là, j'ai vérifié, et le compilateur renvoie une erreur similaire sur mon include SDL/SDL.h>
.
Choses que j'ai essayé:
Chaque variation de <>
et ""
dans mon incluent les déclarations
Retrait de la .h
et .hpp
Réglage de l'drapeaux du compilateur spécifiquement pour rechercher les répertoires contenant les en-têtes avec g++ -I
Ce code a été la compilation avec une version antérieure de MinGW, et l'auteur de la MinGw distrobution précise qu'il a changé le compilateur g++ options par défaut en C++11, donc je pense qu'il est très probable que c'est quelque chose à voir avec cela. Mon google-fu n'a pas donné de résultats, bien que.
- Votre mingw peut-être dans l'ombre.
- Essayez ", qui g++" dans le fichier de créer de comprendre qui est chargé. Par ailleurs, vous ne devriez pas être coder en dur "g++" dans votre Makefile. C'est une mauvaise forme. Voir: sites.google.com/site/michaelsafyan/software-engineering/...
- Est l'actuel emplacement de l'installation la même que la précédente et qui a fonctionné? Vous pouvez toujours être à la recherche dans les anciens dossiers pour les fichiers. Un moyen rapide, indolore vérifier serait de copier le coup de pouce dossier dans le courant de l'installer dans le dossier inclure de l'installation précédente (en supposant, bien sûr, que la réponse à ma première question était non)
- La syntaxe pour qui?
- Oui, les deux installations sont situées à C:\MinGW\. Lors de l'installation de la mise à jour j'ai nettoyé le répertoire MinGw complètement.
- Il pourrait être utile d'utiliser le Moniteur de Processus (disponible à partir de la MS, site web) pour voir où MinGW est à la recherche quand il ne parvient pas à trouver les fichiers en question.
- Créer un vide
empty.c
fichier, puis lancez la commande:gcc -v empty.c
. Coller le résultat dans votre question. Inclus dans le spew seront les répertoires dans lesquels le compilateur recherche pour inclure le fichier dans. En supposant que vous avez installé le nuwen distro enc:\mingw
,scoped_ptr.hpp
doit être en `c:\mingw\include\boost` - J'ai téléchargé et exécuté, mais le résultat est vraiment très complexe. J'ai réussi à trouver la marque d'invocation, mais il ya tellement de nombreux cas de programmes la chaîne de compilation, je ne sais pas où chercher.
- Si vous avez filtré par le nom du fichier à inclure, vous devriez voir juste le temps lorsque le programme tente d'ouvrir ce fichier, qui devraient montrer l'annuaire ou de répertoires, il est à la recherche pour elle. (Évidemment, Michael solution est préférable dans cette situation!)
Vous devez vous connecter pour publier un commentaire.
Solution je suis venu avec: basé sur Michael Burr commentaire ci-dessus, j'ai couru le compilateur avec drapeau du mode verbeux. Pour une raison quelconque, le répertoire include qui est recherché n'est pas situé dans le MinGw répertoire racine, mais enterré dans le
lib
répertoire. J'attends qu'il était destiné à être fixé à l'un des scripts d'installation, mais soit je n'ai pas l'exécuter correctement ou qu'il ne fonctionne pas sur mon système. Le répertoire où j'ai besoin d'ajouter les fichiers concernés est, sur ma machine,C:\MinGW\lib\gcc\x86_64-w64-mingw32\4.8.2\include
C'est un moyen rapide et sale correctif. Je suis sûr qu'il ya une meilleure façon, mais cela je me levai et le plus rapide.
set_distro_paths.bat
script pour définir le chemin de MinGW exécutables. Je ne savais pas que cela ajoute également (ou ensembles) un couple répertoires, tels quec:\mingw\include
à laC_INCLUDE_PATH
etCPLUS_INCLUDE_PATH
variables d'environnement. C'est ce qui se boost et amis. Je pensais queset_distro_paths.bat
seulement définir le chemin d'accès.-I
option de ne pas faire les choses à travailler pour vous. Peut-être que vous avez spécifié-I c:\mingw\include\boost
au lieu de simplement-I c:\mingw\include
?-v
de sortie dans votre question. Aussi, gardez à l'esprit que depuis la version 11.0, nuwen de MinGW est de 64 bits native (la valeur par défaut de construction x64 cibles - je pense qu'il n'a même pas le soutien de la-m32
possibilité de construire une cible 32 bits), donc assurez-vous que toutes les bibliothèques que vous ajoutez à votre construction sont également x64. Si vous avez installé 32 bits libs SDL qui pourrait être une raison pour pas défini des références, depuis un certain nom de l'amputation des règles pour les architectures x86 et x64 sont différents.