web-dev-qa-db-fra.com

En-tête C ++ manquant <__debug> après la mise à jour des outils de ligne de commande OSX 6.3

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.

66
Farley

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:

  • OS X 10.10 commandlinetoolsosx10.10forxcode6.2.dmg
  • OS X 10.9 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:

  1. Vous ne compromettez pas votre chaîne d'outils
  2. Vous pouvez facilement mettre à niveau via l'App Store lorsque Apple résout le problème
  3. Si vous ajoutez un fichier manuellement, vous devez le supprimer plus tard ou d'autres problèmes pourraient survenir

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!

60
gismo141

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
38
jwu

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.

9
Daniel Frey

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".

6
Flash Sheridan

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".

1
zstolar