Falta el encabezado C++<__debug> después de actualizar OSX Command Line Tools 6.3
xcode macos (5)
Después de actualizar a Command Line Tools 6.3 desde App Store, los programas que incluyen
<vector>
o
<iterator>
que incluyen internamente <__debug> causarán un error de archivo no encontrado de la siguiente manera.
El cpp no es nada interesante, pero se incluye en uno de los encabezados incluidos.
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>
^
¿Algunas ideas para arreglar esto? No espero especificar ningún indicador adicional de C ++.
Gracias.
PD: MacBook pro en OSX 10.10.3
Actualizaciones:
Apple verifica el problema en el foro de desarrolladores. En Command Line Tools 6.2, la inclusión de __debug está condicionalmente protegida de la siguiente manera pero no en 6.3.
#ifdef _LIBCPP_DEBUG
# include <__debug>
#else
# define _LIBCPP_ASSERT(x, m) ((void)0)
#endif
Y la gente de libcxx habló sobre eliminar a los guardias de __debug here . Parece que __debug nunca existe en OSX.
Cambie las herramientas de la línea de comandos a 6.2 a través de la página de descarga para desarrolladores de Apple .
Tenga cuidado de descargar la versión correcta para su OS X:
-
OS X 10.10
commandlinetoolsosx10.10forxcode6.2.dmg
-
OS X 10.9
commandlinetoolsosx10.9forxcode6.2.dmg
Esto funciona porque la inclusión de
__debug
está condicionalmente protegida de la siguiente manera en Command Line Tools 6.2 pero no en 6.3.
#ifdef _LIBCPP_DEBUG
# include <__debug>
#else
# define _LIBCPP_ASSERT(x, m) ((void)0)
#endif
En mi opinión, esta es la forma más segura, porque:
- No comprometes tu cadena de herramientas
- Puede actualizar fácilmente a través de la App Store cuando Apple soluciona el problema
- Si agrega un archivo manualmente, debe eliminarlo más tarde o podrían surgir más problemas
Actualización - 21.04.2015
Problema solucionado por Apple. ¡Después de instalar Command Line Tools 6.3.1 todo funciona como se esperaba!
Cree temporalmente el archivo
__debug
faltante donde
_LIBCPP_ASSERT
se define como en Command Line Tools 6.2 para OS X.
echo ''#define _LIBCPP_ASSERT(x, m) ((void)0)'' | sudo tee -a /Library/Developer/CommandLineTools/usr/include/c++/v1/__debug > /dev/null
Elimine el archivo temporal después de que finalice la compilación.
sudo rm /Library/Developer/CommandLineTools/usr/include/c++/v1/__debug
Esto ahora está arreglado en Command Line Tools 6.3.1, disponible en https://developer.apple.com/downloads . La actualización debería aparecer automáticamente en las Actualizaciones de su App Store (aunque está etiquetada como 6.3, no 6.3.1). Disculpe las molestias, y muchas gracias por informar el problema.
Anteriormente: una solución que funcionó para mí en un caso simple fue establecer un mínimo de OS X 10.8 o anterior, con "-mmacosx-version-min = 10.8".
Seguí el consejo de @Flash Sheridan y conseguí que mi CLT volviera a funcionar (git, ruby, brew ...). Utilicé "Herramientas de línea de comandos (OS X 10.10) para Xcode 6.3.1".
¡¡¡Advertencia!!! Este es un truco, úsalo bajo tu propio riesgo. Esta solución solo se entiende como una solución temporal hasta que Apple proporcione una actualización de las herramientas de línea de comandos.
Bien, aquí vamos: cree el archivo usted mismo y coloque el siguiente contenido en él:
#ifndef _LIBCPP_ASSERT
#define _LIBCPP_ASSERT(...) ((void)0)
#endif
Esto
parece
funcionar para mí, pero ciertamente no es lo correcto.
Asegúrese de que el archivo esté ubicado en el lugar correcto
/Library/Developer/CommandLineTools/usr/include/c++/v1/__debug
con el propietario / permisos correctos.