Après la mise à jour vers les outils de ligne de commande 6.3 depuis l'App Store, des programmes comprenant <vector>
ou <iterator>
qui inclut en interne <__debug> provoquera une erreur de fichier introuvable comme suit. Le cpp n'a rien d'intéressant mais inclut dans l'un des en-têtes inclus.
c++ -O3 -I/Users/farleylai/Documents/dev/git/ESMS/Optimizer/../StreamIt/src/cluster/headers -L/Users/farleylai/Documents/dev/git/ESMS/Optimizer/../StreamIt/build/binaries/clusterStaticLibrary /Users/farleylai/Documents/dev/git/ESMS/Optimizer/build/StreamIt/FIR/511/512/combined_threads.cpp -o streamit -lcluster -lpthread -lstdc++
In file included from /Users/farleylai/Documents/dev/git/ESMS/Optimizer/build/StreamIt/FIR/511/512/combined_threads.cpp:9:
In file included from /Users/farleylai/Documents/dev/git/ESMS/Optimizer/../StreamIt/src/cluster/headers/node_server.h:22:
In file included from /Users/farleylai/Documents/dev/git/ESMS/Optimizer/../StreamIt/src/cluster/headers/thread_info.h:20:
In file included from /Users/farleylai/Documents/dev/git/ESMS/Optimizer/../StreamIt/src/cluster/headers/connection_info.h:19:
/Users/farleylai/Documents/dev/git/ESMS/Optimizer/../StreamIt/src/cluster/headers/socket_holder.h:43:25: warning: delete called on 'mysocket' that is abstract but has non-virtual destructor
[-Wdelete-non-virtual-dtor]
if (!is_mem_socket) delete sock;
^
In file included from /Users/farleylai/Documents/dev/git/ESMS/Optimizer/build/StreamIt/FIR/511/512/combined_threads.cpp:9:
In file included from /Users/farleylai/Documents/dev/git/ESMS/Optimizer/../StreamIt/src/cluster/headers/node_server.h:22:
In file included from /Users/farleylai/Documents/dev/git/ESMS/Optimizer/../StreamIt/src/cluster/headers/thread_info.h:26:
In file included from /Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/vector:265:
In file included from /Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/__bit_reference:15:
/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/algorithm:641:10: fatal error: '__debug' file not found
#include <__debug>
^
Des idées pour résoudre ce problème? Je ne m'attends pas à spécifier de drapeaux C++ supplémentaires.
Merci.
PS: MacBook pro sur OSX 10.10.3
Mises à jour:
Le problème est vérifié par Apple sur le forum de leur développeur. Dans les outils de ligne de commande 6.2, l'inclusion de __debug est conditionnellement gardée comme suit mais pas en 6.3.
#ifdef _LIBCPP_DEBUG
# include <__debug>
#else
# define _LIBCPP_ASSERT(x, m) ((void)0)
#endif
Et les gens de libcxx ont parlé de supprimer les gardes de __debug ici . Il semble que __debug n'existe jamais sur OSX.
Rétrogradez les outils de ligne de commande vers 6.2 via Page de téléchargement des développeurs Apple .
Veillez à télécharger la bonne version pour votre OS X:
commandlinetoolsosx10.10forxcode6.2.dmg
commandlinetoolsosx10.9forxcode6.2.dmg
Cela fonctionne car l'inclusion de __debug
est conditionnellement protégé comme suit dans les outils de ligne de commande 6.2 mais pas dans 6.3.
#ifdef _LIBCPP_DEBUG
# include <__debug>
#else
# define _LIBCPP_ASSERT(x, m) ((void)0)
#endif
À mon avis, c'est le moyen le plus sûr, car:
Mise à jour - 21.04.2015
Problème résolu par Apple. Après avoir installé les outils de ligne de commande 6.3.1 tout fonctionne comme prévu!
Créez temporairement le fichier __debug
Manquant où _LIBCPP_ASSERT
Est défini comme dans les outils de ligne de commande 6.2 pour OS X.
echo '#define _LIBCPP_ASSERT(x, m) ((void)0)' | Sudo tee -a /Library/Developer/CommandLineTools/usr/include/c++/v1/__debug > /dev/null
Supprimez le fichier temporaire une fois la génération terminée.
Sudo rm /Library/Developer/CommandLineTools/usr/include/c++/v1/__debug
Attention !!! Ceci est un hack, utilisez à vos risques et périls !!! Cette solution de contournement est uniquement conçue comme un temporaire correction jusqu'à Apple fournit une mise à jour des outils de ligne de commande.
OK, c'est parti: créez le fichier vous-même et mettez-y le contenu suivant:
#ifndef _LIBCPP_ASSERT
#define _LIBCPP_ASSERT(...) ((void)0)
#endif
Cela semble fonctionner pour moi, mais ce n'est certainement pas la bonne chose à faire. Assurez-vous que le fichier se trouve au bon endroit /Library/Developer/CommandLineTools/usr/include/c++/v1/__debug
avec le bon propriétaire/les bonnes autorisations.
Ceci est maintenant corrigé dans les outils de ligne de commande 6.3.1, disponibles sur https://developer.Apple.com/downloads . La mise à jour devrait apparaître automatiquement dans vos mises à jour de l'App Store (bien qu'elle soit étiquetée 6.3, et non 6.3.1). Toutes mes excuses pour la gêne occasionnée et merci beaucoup d'avoir signalé le problème.
Plus tôt: Une solution de contournement qui fonctionnait pour moi dans un cas simple consistait à définir un minimum d'OS X 10.8 ou antérieur, avec "-mmacosx-version-min = 10.8".
J'ai suivi les conseils de @Flash Sheridan et j'ai fait fonctionner à nouveau mon CLT (git, Ruby, brew ...) - J'ai utilisé "Command Line Tools (OS X 10.10) for Xcode 6.3.1".