XCode avec boost “Sémantique Question - identificateur non déclaré va_start”
C++locale.h
->Semantic Issue
-->Use of undeclared identifier 'va_start'
->Semantic Issue
-->Use of undeclared identifier 'va_end'
Première fois à l'aide de boost, téléchargé à l'aide de ports et créé une ligne de commande projet dans XCode.
L'en-tête de la Recherche de Chemin d'accès: /usr/include/**
Il n'y a rien dans le code pourtant, il suffit de la fonction principale qui vient avec la valeur par défaut proj.
Ne sais pas quoi faire, ne s'attendait à ce que cela arrive.
EDIT1:
Première occurrence:
#ifndef _GLIBCXX_CSTDARG
#define _GLIBCXX_CSTDARG 1
#pragma GCC system_header
#include <bits/c++config.h>
#include <stdarg.h>
//Adhere to section 17.4.1.2 clause 5 of ISO 14882:1998
#ifndef va_end
#define va_end(ap) va_end (ap)
#endif
_GLIBCXX_BEGIN_NAMESPACE(std)
using ::va_list;
_GLIBCXX_END_NAMESPACE
#endif
C'est un fichier sans extension \usr\include\c++\4.2.1 et je viens de réaliser que ce fichier n'a rien à voir avec boost, il y a quelque chose de méchant qui se passe ici.
EDIT2: Après la fixation de l'inclure dir /opt/local/include/** nouveau des erreurs sont apparues:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/c++/v1/type_traits:214:46:
Use of undeclared identifier 'nullptr_t'; did you mean 'nullptr'?
Il y a d'autres erreurs, tous liés à ces fichiers dans le dossier de sr/lib/c++/v1/pourquoi est-ce? Ces fichier semble être certaines fonctionnalités de base, ils ne peuvent pas être cassé.
Voici une photo de l'erreur, ou peut-être voir quelque chose les gars
EDIT3: Changer le compilateur à partir de Apple LLVM pour GCC LLVM réduit les erreurs d'un seul:
"vspintf n'est pas membre de 'std'" en c++locale.h. Ok, maintenant je suis complètement perdu.
Tout d'abord, êtes-vous des capacités dans le Xcode, interface utilisateur, via xcodebuild, ou en utilisant la ligne de commande de la chaîne? Avez-vous plusieurs versions de Xcode? Avez-vous changé de versions de Xcode depuis l'installation de MacPorts? (J'ai demandé la dernière car j'ai eu exactement ce problème—boost a été construit contre 10,6 SDK, et quand j'ai mis à jour Xcode, je n'avais plus de 10,6 SDK, et dans la ligne de commande génère qui mène à bizarre erreurs qui ressemblent à la vôtre.)
Aussi, si vous êtes en utilisant clang plutôt que de gcc, assurez-vous que vous n'êtes pas le mélange de la libc++ et libstdc++.
C'est une erreur, il l'habitude de finitions de la construction. Compilation avec Xcode IDE. Je viens d'installer macpors pour installer boost, c'est la même xcode depuis. Je ne sais pas ce que je suis à l'aide, je pense que c'est le compilateur par défaut(LLVM)
Juste créé un autre frais XCode outil de ligne de commande de l'app. Il n'y a pas d'erreurs lors de la construction de la Bonjour tout le Monde, mais juste l'ajout de l'en-Tête le Chemin de Recherche des sauts de la compilation indiquée ci-dessus d'erreur, il n'y a aucune référence à coup de pouce dans mon code encore, juste ajouté le chemin de recherche.
OriginalL'auteur Paulo Henrique | 2012-09-24
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, vous êtes peut-être pas
#include
ing droite des en-têtes.Par exemple, si vous n'avez pas
#include <cstddef>
, vous ne pouvez pas utiliserstd::nullptr_t
; tenter de le faire, vous pouvez:Souvent, tirant dans un en-tête qui se passe implicite de tirer dans diverses autres en-têtes, de sorte que les choses fonctionnent, même quand ils ne le sont pas. libstdc++ n'est-ce beaucoup plus que la libc++, et l'ancien est la valeur par défaut de la bibliothèque pour llvm-g++ (GCC LLVM"), le second pour clang ("Apple LLVM"), ce qui signifie un grand nombre d'erreurs semblent aller loin quand vous passez à "GCC LLVM" (ou simplement s'en tenir à "Apple LLVM" et mettez votre bibliothèque), mais que votre code est toujours mauvais.
Une autre possibilité est que vous êtes en essayant de compiler en C++11 en C++03 mode. Par exemple, lorsque vous
#include <cstddef>
en C++03 mode, il ne devrait pas définirnullptr_t
. Il peut le faire de toute façon—et il peut le faire avec llvm-g++ et/ou libstdc++, mais pas avec clang et/ou de la libc++. Mais votre code (ou, dans ce cas, votre projet) est encore mal et devrait être corrigé.Si vous pouvez nous montrer le réel (stripped-down) du code qui génère ces erreurs, et de nous dire exactement ce qu'paramètres que vous avez modifiés à partir de la valeur par défaut "Outil de Ligne de Commande, C++" projet que vous avez créé dans Xcode (en supposant que c'est ce que vous avez créé), il devrait être possible d'être plus précis.
Pour obtenir un programme minimal de travail avec boost, en supposant que vous avez Xcode, MacPorts, et MacPorts boost installé correctement, tout ce que vous avez à faire est ceci:
/opt/local/include
.main.cpp
ressembler à ce qui suit:main.cpp
J'ai pris boost::uuid parce que c'est un mort-simple bibliothèque, mais le même travail pour la compilation d'une partie de boost.
Certaines parties de boost aussi vous demander de lien dans une bibliothèque. Pour cela, vous devrez également ajouter
/opt/local/lib
à la Bibliothèque des Chemins de Recherche avant, vous pouvez utiliser la plupart des techniques habituelles pour l'ajout de bibliothèques d'un projet.Noter que si vous êtes à jour, vous pouvez rendre cela encore plus courte, car avec Xcode 4.5, les valeurs par défaut seront Apple LLVM Compilateur 4.1, GNU++11 dialecte, et de la libc++ C++11 bibliothèque de prise en charge. Mais j'ai fait en sorte que mon code est en C++03-compatible, donc il fonctionne avec les paramètres par défaut dans presque n'importe quelle version de Xcode (j'ai testé avec 3.2), puisque vous ne nous a jamais dit que la version que vous utilisez.
Devrait pas être un problème, surtout depuis que c'est ce que j'utilise moi-même; il suffit d'utiliser
/usr/local
en place de/opt/local
tout lieu, il apparaît ci-dessus. (Sauf si vous avez les deux Homebrew et MacPorts installé, ce qui est généralement une mauvaise idée. Si vous avez des problèmes, vous pouvez masquer temporairement par MacPorts, par exemple,sudo mv /opt/local /opt/local-bak
.)Merci pour votre aide, ça fonctionne maintenant!
Cela ne fonctionne pas avec xcode 5.1 =( toujours les mêmes erreurs, des idées?
OriginalL'auteur abarnert
J'ai eu le même problème, j'ai installé coup de pouce avec homebrew et quand j'ajoute l'en-Tête "Chemin de Recherche' (/usr/local/Cave/boost/1.54.0/include avec l'option récursif) dans XCode l'accumulation jeter ces erreurs.
Pour le fixer, j'ai changé l'option récursif à la non-récursif sur l'en-Tête "Chemin de Recherche' et cela a fonctionné.
Oui, la récursif pour non-récursive était mon problème.
OriginalL'auteur icapurro
J'ai eu ce problème et l'a résolu. Dans XCode sur mac osx mavericks avait à ajouter /opt/local/libs/le chemin de recherche des bibliothèques (non récursif). J'ai ensuite ajouté /opt/local/include/à l'en-tête de la recherche de chemin (non récursif).
OriginalL'auteur Nathan
Vous devez
#include <stdarg.h>
afin d'utiliser leva_start
macros et coll. Si ces erreurs se produisent dans un fichier d'en-tête, alors que le fichier d'en-tête devrait inclure<stdarg.h>
; si ça ne marche pas, vous pouvez contourner le problème en incluant vous-même avant - vous d'inclure la problématique de l'en-tête (mais vous devez également signaler le problème à la bibliothèque développeurs, si possible).OriginalL'auteur Adam Rosenfield
Du dernier commentaire, je pense que je connais le problème.
Où avez-vous le chemin de recherche
/usr/include/**
?MacPorts installe tout à
/opt/local
, pas/usr
, si vous voulez/opt/local/include
(ou/opt/local/include/**
ou/opt/local/include/boost
); l'ajout de/usr/include/**
ne va pas aider du tout avec Boost.Cependant, il peut casser votre code avant même que vous obtenez à coup de fouet.
Ce qui est dans
/usr/include
est Xcode s Outils de Ligne de Commande. Si vous n'avez pas ces informations, vous avez un incomplètes et inutilisable ensemble d'en-têtes; si vous le faites, vous avez un ensemble d'en-têtes qui est en conflit avec le SDK de base construit.La réponse est de ne pas ajouter
/usr/include/**
à votre chemin de recherche.Ou, si vous avez vraiment besoin de l'ajouter (mais vraiment, vous n'avez pas), le changement de la Base SDK Actuel "OS X" à la place de "Dernier OS X", ce qui signifie que vous serez l'obtention de vos en-têtes par défaut de
/usr/include
au lieu de, par exemple,/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/usr/include
, et bien sûr l'ajout d'un chemin qui est déjà là de ne pas conduire à des conflits.Si vous pouviez partager un Projet avec XCode coup de pouce, je serais tellement heureux.
Eh bien, mon boost est installé par Homebrew plutôt que de MacPorts, de sorte que vous auriez à modifier l'en-Tête de la Recherche de Chemins de
/usr/local/include
à/opt/local/include
. Et, puisque c'est la seule chose que j'ai changé par défaut, vous pouvez facilement commencer avec une valeur par défaut.Voir mon autre réponse pour des instructions étape par étape.
Je viens de tomber sur le même problème, et j'ai trouvé toutes ces erreurs lors de l'utilisation de Boost dans mon projet Xcode. Après essais et d'erreurs, j'ai trouvé que l'en-Tête et la Bibliothèque de chemins d'accès doivent être non-récursive. Une fois que je l'ai fait, tout est compilé sans erreurs.
OriginalL'auteur abarnert
Me semble que j'ai corrigé. Après avoir essayé installe avec homebrew, macports et à la main, il était difficile de trouver tout ce qui nécessaire évolution dans le backend de Xcode, qui je l'avoue encore trouver un peu déroutant à la fois.
Afin de l'en-Tête des chemins de recherche contenaient encore des homebrew cave en tant que partie du long chemin, alors j'ai changé ce bit /usr/include
En-Tête utilisateur Chemin que j'ai eu comme /usr/local/lib selon certaines instructions que j'avais trouvé à chercher une solution. J'ai maintenant changé pour /usr/local/lib
Après ces changements, mes erreurs ont enfin disparu! Je croise les doigts j'ai bien compris maintenant
OriginalL'auteur jewfro