Catalina C ++: el uso de encabezados <cmath> produce un error: ningún miembro llamado 'signbit' en el espacio de nombres global

16

Después de actualizar a Catalina desde Mojave, Configuración: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk en el entorno.

No puedo compilar un programa que use <cmath>encabezado.

Traté de cambiar CFLAGS, CCFLAGS, CXXFLAGS para señalar la ubicación MacOSSDK que no cambia nada

Scanning dependencies of target OgreMain
/Applications/Xcode.app/Contents/Developer/usr/bin/make -f OgreMain/CMakeFiles/OgreMain.dir/build.make OgreMain/CMakeFiles/OgreMain.dir/build
[  0%] Building CXX object OgreMain/CMakeFiles/OgreMain.dir/src/OgreASTCCodec.cpp.o
cd /Users/roman/Downloads/ogre-1.12.2/build/OgreMain && /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++  -DOgreMain_EXPORTS -D__ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES=0 -I/Users/roman/Downloads/ogre-1.12.2/OgreMain/src/OSX -I/Users/roman/Downloads/ogre-1.12.2/OgreMain/include/Threading -I/Users/roman/Downloads/ogre-1.12.2/OgreMain/src -I/Users/roman/Downloads/ogre-1.12.2/build/Dependencies/include -I/Users/roman/Downloads/ogre-1.12.2/OgreMain/include -I/Users/roman/Downloads/ogre-1.12.2/build/include -I/Users/roman/Downloads/ogre-1.12.2/OgreMain -isystem /usr/local/include  -Wall -Winit-self -Wcast-qual -Wwrite-strings -Wextra -Wundef -Wmissing-declarations -Wno-unused-parameter -Wshadow -Wno-missing-field-initializers -Wno-long-long -Wno-inconsistent-missing-override  -msse -O3 -DNDEBUG -arch x86_64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk -fPIC -fvisibility=hidden -fvisibility-inlines-hidden   -std=c++11 -o CMakeFiles/OgreMain.dir/src/OgreASTCCodec.cpp.o -c /Users/roman/Downloads/ogre-1.12.2/OgreMain/src/OgreASTCCodec.cpp
In file included from /Users/roman/Downloads/ogre-1.12.2/OgreMain/src/OgreASTCCodec.cpp:29:
In file included from /Users/roman/Downloads/ogre-1.12.2/OgreMain/src/OgreStableHeaders.h:40:
In file included from /Users/roman/Downloads/ogre-1.12.2/OgreMain/include/OgrePrerequisites.h:309:
In file included from /Users/roman/Downloads/ogre-1.12.2/OgreMain/include/OgreStdHeaders.h:10:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/cmath:314:9: error: no member named 'signbit' in the global namespace
using ::signbit;
      ~~^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/cmath:315:9: error: no member named 'fpclassify' in the global namespace
using ::fpclassify;
      ~~^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/cmath:316:9: error: no member named 'isfinite' in the global namespace; did you mean 'finite'?
using ::isfinite;

por ejemplo, la macro: islessestá presente en el espacio de nombres global y en mi computadora:

 cat math.h | grep "isless"

#define isless(x, y) __builtin_isless((x),(y))
#define islessequal(x, y) __builtin_islessequal((x),(y))
#define islessgreater(x, y) __builtin_islessgreater((x),(y))
  pwd
/usr/local/include

Incluso el encabezado cmath lo incluye:

 cat /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/cmath | grep "math.h"
#include <math.h>

Y mi línea de comando tiene la opción -isystem /usr/local/include

Esto debería funcionar...

Sztergbaum romano
fuente
¿ xcode-select -pCoincide donde se encuentra Xcode? ¿Puedes cambiar el código a using std::signbit;, también para los demás? ¿Estás compilando como C ++ 11 o posterior?
Eljay
Compilación como C ++ 11. ¡No puedo cambiar el código, es una dependencia externa! sí xcode-select -pcoincide con el lugar donde XCodese encuentra.
Roman Sztergbaum
Eso no es bueno. El código está intentando hacerlo using ::signbit;y el símbolo no está en el espacio de nombres global, está en el std::espacio de nombres. Presumo lo mismo con los demás (no los perseguí).
Eljay

Respuestas:

7

Tengo curiosidad: ¿Qué compilador estás usando? ¿Cuál es el valor de CMAKE_OSX_SYSROOT?

Estoy bastante convencido de que esto es el resultado de un error CMAKE_OSX_SYSROOT. Tuve el problema que estás describiendo al usar enlaces de python para clang (donde CMake no administra la llamada del compilador), pero logré recrear el error en CMake haciendo:

set(CMAKE_OSX_SYSROOT "")  # Reset.

Resolví mi problema siguiendo las respuestas a esta pregunta: No puedo compilar paquetes R con código c ++ después de actualizar a macOS Catalina .

Para resumir: en Catalina, /usr/includese purga y protege mediante SIP. Por lo tanto, cualquier proyecto que espere que se encuentren los encabezados C allí no se compilará. Si no recuerdo mal, Apple recomienda a los informes de error de archivo a los proyectos que esperan cabeceras C en /usr/include.

Debe apuntar el sistema de compilación del código que está intentando compilar a los encabezados correctos:

(1) Asegúrese de que Xcode esté actualizado. No se sabe lo que un Xcode obsoleto en Catalina podría hacerle a su entorno de compilación.

(2) Utilice el -isysroot /sdk/pathindicador del compilador, donde /sdk/pathes el resultado de xcrun --show-sdk-path. No estoy seguro de cuál es la mejor práctica de CMake, pero intenta hacer

set(CMAKE_OSX_SYSROOT /sdk/path)

o

set(CMAKE_CXX_FLAGS "[...] -isysroot /sdk/path")

Si eso resuelve el problema, es posible que desee buscar una mejor manera de hacerlo en CMake.

Por supuesto, si eres aventurero, también puedes desactivar SIP, como se sugiere en la respuesta a mi pregunta: / usr / include missing en macOS Catalina (con Xcode 11)

mkl
fuente
1
set(CMAKE_OSX_SYSROOT ...)entra CMakeLists.txt, no la cáscara.
mkl
6

Tengo el mismo problema al intentar apuntar a iOS (tanto en mi MacBook Air como en el corredor de acciones de GitHub) y aquí hay algunas ideas más sobre el problema, aunque no estoy lo suficientemente familiarizado con el ecosistema de Apple como para sugerir una solución adecuada. La línea de comando original provenía de CMake en cpprestsdk, pero una vez que la reduje a lo esencial, aquí hay una breve reproducción.

  1. Cree un archivo cmath-bug.cppcon la única línea:
    #include <cmath>
  1. Ejecutar (las nuevas líneas delante de algunos argumentos son para conveniencia de lectura, elimínelas)
clang -v -x c++ -target arm64-apple-ios13.2 -fcolor-diagnostics -std=c++11 -stdlib=libc++ 
-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.2.sdk 
-isystem  /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.2.sdk/usr/include
-c cmath-bug.cpp

Cuando lo ejecuto, me familiarizo con muchos que enfrentan el mismo problema:

Apple clang version 11.0.0 (clang-1100.0.33.16)
Target: arm64-apple-ios13.2
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
 "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" -cc1 -triple arm64-apple-ios13.2.0 -Wdeprecated-objc-isa-usage -Werror=deprecated-objc-isa-usage -Werror=implicit-function-declaration -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -discard-value-names -main-file-name cmath-bug.cpp -mrelocation-model pic -pic-level 2 -mthread-model posix -mdisable-fp-elim -fno-strict-return -masm-verbose -munwind-tables -target-sdk-version=13.2 -target-cpu cyclone -target-feature +fp-armv8 -target-feature +neon -target-feature +crypto -target-feature +zcm -target-feature +zcz -target-feature +sha2 -target-feature +aes -target-abi darwinpcs -fallow-half-arguments-and-returns -dwarf-column-info -debugger-tuning=lldb -ggnu-pubnames -target-linker-version 530 -v -coverage-notes-file /Users/myuser/Projects/C++/cmath-bug.gcno -resource-dir /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.2.sdk -isystem /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.2.sdk/usr/include -stdlib=libc++ -internal-isystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1 -Wno-framework-include-private-from-public -Wno-atimport-in-framework-header -Wno-extra-semi-stmt -Wno-quoted-include-in-framework-header -std=c++11 -fdeprecated-macro -fdebug-compilation-dir /Users/myuser/Projects/C++ -ferror-limit 19 -fmessage-length 204 -stack-protector 1 -fstack-check -mdarwin-stkchk-strong-link -fblocks -fencode-extended-block-signature -fregister-global-dtors-with-atexit -fobjc-runtime=ios-13.2.0 -fcxx-exceptions -fexceptions -fmax-type-align=16 -fdiagnostics-show-option -fcolor-diagnostics -o cmath-bug.o -x c++ cmath-bug.cpp
clang -cc1 version 11.0.0 (clang-1100.0.33.16) default target x86_64-apple-darwin19.0.0
ignoring nonexistent directory "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.2.sdk/usr/include/c++/v1"
ignoring nonexistent directory "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.2.sdk/usr/local/include"
ignoring nonexistent directory "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.2.sdk/Library/Frameworks"
ignoring duplicate directory "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.2.sdk/usr/include"
#include "..." search starts here:
#include <...> search starts here:
 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.2.sdk/usr/include
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0/include
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include
 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.2.sdk/System/Library/Frameworks (framework directory)
End of search list.
In file included from cmath-bug.cpp:1:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/cmath:318:9: error: no member named 'signbit' in the global namespace
using ::signbit;
      ~~^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/cmath:319:9: error: no member named 'fpclassify' in the global namespace
using ::fpclassify;
      ~~^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/cmath:320:9: error: no member named 'isfinite' in the global namespace; did you mean 'finite'?
using ::isfinite;
      ~~^

Los únicos 2 directorios de inclusión que paso en mi línea de comando original existen y son:

$ ls -alF /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.2.sdk
lrwxr-xr-x  1 root  wheel    12B Dec 17 11:54 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.2.sdk@ -> iPhoneOS.sdk
$ ls -alF /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.2.sdk/usr/include
total 2160
drwxr-xr-x  169 root  wheel   5.3K Dec 17 12:07 ./
drwxr-xr-x    5 root  wheel   160B Nov  4 19:22 ../
 ...
-rw-r--r--    9 root  wheel    32K Nov  4 19:52 math.h
 ...

Pero lo interesante aquí son los directorios de inclusión no existentes que informa, así como los directorios de inclusión que finalmente busca y su orden. Mi conjetura es que los directorios adicionales no mencionados en la línea de comando son insertados por el controlador de Apple Clang basado en alguna lógica específica de Apple.

Puede ver en el error informado que el <cmath>encabezado se encuentra en: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/cmathy en la línea 304 puede ver:

#include <__config>      // Line 304
#include <math.h>        // This one ends up causing troubles
#include <__cxx_version>

A juzgar por el hecho de que en esa misma carpeta /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/hay un archivo math.hque proporciona las definiciones necesarias, por ejemplo:

#include <__config>

#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
#endif

#include_next <math.h>

#ifdef __cplusplus

// We support including .h headers inside 'extern "C"' contexts, so switch
// back to C++ linkage before including these C++ headers.
extern "C++" {

#include <type_traits>
#include <limits>

// signbit

#ifdef signbit

template <class _A1>
_LIBCPP_INLINE_VISIBILITY
bool
__libcpp_signbit(_A1 __lcpp_x) _NOEXCEPT
{
    return signbit(__lcpp_x);
}

#undef signbit

template <class _A1>
inline _LIBCPP_INLINE_VISIBILITY
typename std::enable_if<std::is_floating_point<_A1>::value, bool>::type
signbit(_A1 __lcpp_x) _NOEXCEPT
{
    return __libcpp_signbit((typename std::__promote<_A1>::type)__lcpp_x);
}

...

#elif defined(_LIBCPP_MSVCRT)
...
#endif  // signbit

los autores <cmath>esperaban math.hque la misma carpeta se incluyera primero y luego la #include_next <math.h>directiva encontrara el sistema específico math.h. Sin embargo, eso no es lo que sucede en realidad.

Si observa las primeras 2 entradas en los directorios buscados:

#include <...> search starts here:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.2.sdk/usr/include
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1

verá que el directorio de inclusión específico del sistema termina por encima del directorio de la biblioteca estándar inyectado por Clang, por lo que se encuentra el específico del sistema math.h, no el que está en la misma carpeta que el resto de los encabezados de la biblioteca estándar. Este es probablemente el caso porque si agrego explícitamente el directorio de inclusión de la biblioteca estándar a mi línea de comando ANTES de los otros dos directorios, -isystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1el problema desaparece y puedo compilar el archivo. Eso no es lo que el controlador de Clang o cualquier otra cosa involucrada aquí hace automáticamente: agrega ese directorio de biblioteca estándar a través de -internal-system(no estoy seguro de cuál es la semántica de ese indicador interno) y lo agrega DESPUÉS del directorio del sistema.

Ahora, si mira la lista de directorios ignorados, la primera entrada en esa lista es:

ignoring nonexistent directory "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.2.sdk/usr/include/c++/v1"

de los cuales la c++/v1parte final no existe en mi máquina, lo que me hace preguntarme si se suponía que la instalación del SDK del iPhone crearía un enlace simbólico c++dentro de la parte existente de la ruta para apuntar al /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++directorio para que todo funcione.

De todos modos, esto es lo que creo que está sucediendo y me pregunto si alguien sabe cómo solucionarlo correctamente.

¡Gracias!

PD Para el contexto:

$ xcode-select -p
/Applications/Xcode.app/Contents/Developer
$ xcrun --show-sdk-path -sdk iphoneos13.2
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.2.sdk
solodon
fuente
2

Usando el comando:

gcc -Wp,-v -E -

mi #include <...> secuencia de búsqueda:

 /usr/local/include
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/10.0.1/include
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include
 /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include
 /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/Frameworks (framework directory)

La razón del error #include se describe a continuación:

 - #include<cmath> resides in /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1
 - It includes <math.h>.
 - It searches /usr/local/include directory as this is the first directory to search. There is a math.h in "/usr/local/include/c++/9.3.0/" directory
 - It tries to use this.
 - But expectation was to use the math.h of the same directory /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1
 - The math.h of /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1 include math.h of /usr/local/include using #include_next<math.h>
 - As wrong math.h is included/linked with /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/cmath, the compilation error happens

La solución:

    1. If we can alter the search order of #include<...> to search /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1 at first, it can be fixed.
    2. Using #include</Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/math.h> instead of <math.h> in /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/cmath

¡He seguido la opción # 2 y la construcción es exitosa ahora!

Y gracias a solodon por la respuesta detallada. Seguí la respuesta para solucionar el problema.

Niloy Datta
fuente
Hola Niloy Datta! Le sugiero que edite esta respuesta eliminando la pregunta de esta respuesta e incluya solo qué respuestas. Si tiene una pregunta, haga las preguntas por separado de la manera adecuada en esta comunidad.
Tiago Martins Peres 李大仁
1
@TiagoMartinsPeres 李大仁, lo eliminó. Gracias.
Niloy Datta
Gracias hombre, funcionó para mí. ¿Conoces una forma más limpia de lidiar con este problema?
Victor Sanchez hace
1

Es posible que su copia de Xcode esté dañada. Consulte con codeign:

codesign --verify /Applications/Xcode.app

Esto me pasó a mí, y el problema fue Xcode corrupto. La reinstalación lo arregló.

Algo había modificado lo siguiente:

file added: /Applications/Xcode-11.3.1-.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/json/__pycache__/scanner.cpython-37.pyc
file added: /Applications/Xcode-11.3.1-.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/json/__pycache__/decoder.cpython-37.pyc
file added: /Applications/Xcode-11.3.1-.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/json/__pycache__/encoder.cpython-37.pyc
file added: /Applications/Xcode-11.3.1-.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/json/__pycache__/__init__.cpython-37.pyc
file modified: /Applications/Xcode-11.3.1-.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/usr/include/math.h
file modified: /Applications/Xcode-11.3.1-.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include/math.h
file modified: /Applications/Xcode-11.3.1-.app/Contents/Developer/Platforms/WatchOS.platform/Developer/SDKs/WatchOS.sdk/usr/include/math.h
file modified: /Applications/Xcode-11.3.1-.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/math.h
file modified: /Applications/Xcode-11.3.1-.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Kernel.framework/Versions/A/Headers/math.h
file modified: /Applications/Xcode-11.3.1-.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/DriverKit19.0.sdk/System/DriverKit/usr/include/math.h
file modified: /Applications/Xcode-11.3.1-.app/Contents/Developer/Platforms/WatchSimulator.platform/Developer/SDKs/WatchSimulator.sdk/usr/include/math.h
file modified: /Applications/Xcode-11.3.1-.app/Contents/Developer/Platforms/AppleTVSimulator.platform/Developer/SDKs/AppleTVSimulator.sdk/usr/include/math.h
file modified: /Applications/Xcode-11.3.1-.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/include/math.h

math.h estaba vacío en todos los lugares anteriores.

Rob Napier
fuente
1

El análisis de @ solodon es perfecto. Es probable que el problema cmathincluya una versión incorrecta del archivo math.hsegún el orden de búsqueda de los archivos de encabezado. Al menos, esto es lo que me estaba sucediendo cuando recibía el mismo error.

Escanee la salida de su compilador para #include <...> search starts here:. También puede forzar esta salida desde la línea de comando con (fuente) :

gcc -Wp,-v -E -

Debería verse más o menos así:

 /usr/local/include
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0/include
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include
 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include
 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks (framework directory)

Note que los caminos con Toolchainsvienen antes que aquellos con Platforms. Si en su caso el orden se invierte, debe averiguar qué está causando esto en su configuración. Para mí, fue una configuración explícita CPLUS_INCLUDE_PATHen mi script de inicio de sesión.

Código ofensivo:

XCBASE=`xcrun --show-sdk-path`
export CPLUS_INCLUDE_PATH=$XCBASE/usr/include

Esto fue parte de mi intento de evitar Xcode 11 que ya no proporciona el paquete de instalación para los archivos de encabezado del SDK. Después de eliminar este código, pude incluirlo con éxito cmathen mi código C ++.

Si vino aquí buscando soluciones a este problema, es posible que necesite una solución diferente, pero con suerte esto ayudará a arrojar luz sobre lo que parece ser la causa raíz de este problema, el orden de la ruta de búsqueda del archivo de encabezado.

Ryan H.
fuente
0

Encontré que dentro de mi proyecto tengo un archivo math.h. Después de cambiarle el nombre, el problema desapareció. Las costuras cmathincluyen mi archivo en lugar del sistema.

Gralex
fuente
0

Acabo de recibir este error al intentar compilar gRPC después de actualizar recientemente a 10.15.4 y Xcode 11.4 y comencé a buscar todas las soluciones ofrecidas (aquí y no puedo compilar un programa C en una Mac después de actualizar a Catalina 10.15 ) y probé algunos de ellos (aunque no intenté recrearlos, /usr/includeya que eso violaría la separación que Apple estaba tratando de crear), nada parecía funcionar.

Luego miré de cerca las invocaciones reales de cumplimiento que el makeproceso estaba produciendo y noté que había un

-I/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include

eso finalmente causó que las inclusiones ocurrieran en el orden incorrecto: la eliminación de esta ruta de inclusión explícita permitió que la compilación tuviera éxito con una instalación predeterminada de catalina, Xcode y las herramientas de línea de comandos Xcode, como era de esperar, ningún otro truco / indicador de compilación necesario.

pahjbo
fuente
Me encontré con este problema también. Resulta que algunos pkg-configarchivos (por ejemplo, libcurl) de Homebrew agregan esta ruta automáticamente, incluso si tiene instalado Xcode. Esto se solucionó en Homebrew 2.2.13. Más detalles en github.com/Homebrew/brew/issues/5068 ; PR que corrige esto está en github.com/Homebrew/brew/pull/7331 . TL; DR: Actualización homebrew
kkaefer
Sí, era un viejo homebrew pkg_config para zlib que todavía estaba de alguna manera por ahí, lo que me estaba causando esto, a pesar de tener un homebrew actualizado y no tener un zlib instalado de todos modos
pahjbo
0

Puede intentar usar el SDK de CommandLineTools en lugar del SDK XCode.app.

Arreglo este problema cuando compilo PointCloudLibrary (PCL)

#Check the current sdk
xcrun --show-sdk-path

#Change sdk
sudo xcode-select -s /Library/Developer/CommandLineTools          #Using CommandLineTools SDK
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer   #Using XCode.app SDK

Además, reinstalar XCode.app y CommandLineTools pueden ayudar.

Lester Lo
fuente
0

Resumen: en mi caso, el script de compilación usaba una versión anterior de ios-cmaketoolchain (2.1.2), y al actualizarlo a 3.1.2 se solucionó el problema de inclusión de cmath / math.

Adaptando el ingenioso comando propuesto por @Ryan H. gcc -Wp,-v -E -para mi caso (clang, c ++, iOs target)

clang -x c++ -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.4.sdk -Wp, -v -E -

rinde en dos Catalina, incluida una virgen donde la única herramienta instalada es XCode 11.14.1:

 clang -cc1 version 11.0.3 (clang-1103.0.32.59) default target x86_64-apple-darwin19.4.0
ignoring nonexistent directory "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.4.sdk/usr/include/c++/v1"
ignoring nonexistent directory "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.4.sdk/usr/local/include"
ignoring nonexistent directory "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.4.sdk/Library/Frameworks"
#include "..." search starts here:
#include <...> search starts here:
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.3/include
 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.4.sdk/usr/include
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include
 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.4.sdk/System/Library/Frameworks (framework directory)
End of search list.

Entonces, la ruta de inclusión correcta es la primera no ignorada, todo debería funcionar bien, pero no fue así. Parece que el problema provino de un comando de inclusión adicional agregado a la llamada de compilación por la cadena de herramientas ios-cmake:

CompileC /Users/<...>/build.Release.ios/<...>.o <...>.cpp normal arm64 c++ com.apple.compilers.llvm.clang.1_0.compiler
-Isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.4.sdk <...>
 -I/Users/<...>/Build_iOS/build.Release.ios/build.arm/Binaries/Release/include
 -Isystem /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.4.sdk/usr/include
 -I/Users/<...>/Build_iOS/build.Release.ios/build.arm/src/<...>.build/Release-iphoneos/<...>/DerivedSources/arm64
...

El culpable fue la -Isystem ...línea, lo que hará que la #include <math>línea en el archivo cmath termine cargando el archivo incorrecto. Después de mucho tratar de arreglar los scripts de cmake, noté la versión anterior de ios-cmake, y actualizarlo tenía el 'único' efecto de eliminar la -Isystemlínea no deseada : todo lo demás era casi lo mismo (excepto algunas opciones de compilador)

Spikegee
fuente