Catalina C ++: utilizzo delle intestazioni <cmath> produce errore: nessun membro chiamato 'signbit' nello spazio dei nomi globale


16

Dopo l'aggiornamento a Catalina da Mojave, Installazione: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk in ambiente.

Non riesco a compilare un programma che utilizza l' <cmath>intestazione.

Ho provato a cambiare CFLAGS, CCFLAGS, CXXFLAGS per indicare la posizione di MacOSSDK che non cambia nulla

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;

ad esempio la macro: islessè presente nello spazio dei nomi globale e sul mio computer:

 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

Anche l'intestazione cmath lo include:

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

E la mia riga di comando ha l'opzione -isystem /usr/local/include

Questo dovrebbe funzionare ...


Fa xcode-select -pincontro in cui si trova Xcode? Puoi cambiare il codice in using std::signbit;, allo stesso modo per gli altri? Stai compilando come C ++ 11 o successivo?
Eljay,

Compilazione come C ++ 11. Non posso cambiare il codice, è una dipendenza esterna! si xcode-select -pcorrisponde dove XCodesi trova.
Sztergbaum romano,

Questo non è buono. Il codice sta provando a fare using ::signbit;e il simbolo non è nello spazio dei nomi globale, è nello std::spazio dei nomi. Presumo allo stesso modo con gli altri (non li ho inseguiti).
Eljay,

Risposte:


7

Sono curioso: quale compilatore stai usando? Qual è il valore di CMAKE_OSX_SYSROOT?

Sono abbastanza convinto che questo sia il risultato di un errore CMAKE_OSX_SYSROOT. Ho avuto il problema che stai descrivendo quando si usano i collegamenti python per clang (dove CMake non gestisce la chiamata del compilatore), ma sono riuscito a ricreare l'errore in CMake facendo:

set(CMAKE_OSX_SYSROOT "")  # Reset.

Ho risolto il mio problema seguendo le risposte a questa domanda: Impossibile compilare i pacchetti R con codice c ++ dopo l'aggiornamento a macOS Catalina .

Riassumendo: su Catalina, /usr/includeviene eliminato e protetto da SIP. Pertanto, qualsiasi progetto che prevede di trovare le intestazioni C non riuscirà a essere compilato. Se non ricordo male, Apple consiglia di segnalazioni d'errore a progetti che si aspettano le intestazioni C a /usr/include.

Devi puntare il sistema di compilazione del codice che stai cercando di compilare nelle intestazioni giuste:

(1) Assicurarsi che Xcode sia aggiornato. Non si sa cosa potrebbe fare un Xcode obsoleto su Catalina nel proprio ambiente di costruzione.

(2) Utilizzare il -isysroot /sdk/pathflag del compilatore, dove /sdk/pathè il risultato di xcrun --show-sdk-path. Non sono sicuro di quale sia la migliore pratica di CMake, ma prova a farlo

set(CMAKE_OSX_SYSROOT /sdk/path)

o

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

Se questo risolve il problema, potresti voler cercare un modo migliore per farlo in CMake.

Naturalmente, se sei avventuroso, potresti anche disabilitare SIP, come suggerito nella risposta alla mia domanda: / usr / include mancante su macOS Catalina (con Xcode 11)


1
set(CMAKE_OSX_SYSROOT ...)entra CMakeLists.txt, non nel guscio.
mkl

6

Sto riscontrando lo stesso problema durante il tentativo di indirizzare iOS (sia sul mio MacBook Air che sul corridore Azioni GitHub) e qui ci sono alcuni pensieri in più sul problema anche se non ho abbastanza familiarità con l'ecosistema Apple per suggerire una soluzione adeguata. La riga di comando originale proveniva da CMake in cpprestsdk, ma una volta che l'ho ridotta a elementi essenziali, ecco una breve riproduzione.

  1. Crea un file cmath-bug.cppcon l'unica riga al suo interno:
    #include <cmath>
  1. Esegui (le nuove righe davanti ad alcuni argomenti sono utili per la lettura, rimuovile)
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

Quando lo eseguo, ho familiarità con molti che affrontano lo stesso 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;
      ~~^

Le uniche 2 directory incluse che passo sulla mia riga di comando originale esistono e sono:

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

Ma i bit interessanti qui sono le directory include inesistenti che riporta così come le directory include che alla fine cerca e il loro ordine. La mia ipotesi è che le directory aggiuntive non menzionate nella riga di comando vengano inserite dal driver di Apple Clang in base a una logica specifica di Apple.

Dall'errore segnalato si può vedere che l' <cmath>intestazione si trova in: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/cmathe alla riga 304 di essa è possibile vedere:

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

A giudicare dal fatto che nella stessa cartella /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/è presente un file math.hche fornisce le definizioni necessarie, ad esempio:

#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

gli autori <cmath>si aspettavano math.hche la stessa cartella fosse inclusa per prima e poi la #include_next <math.h>direttiva trovasse il sistema specifico math.h. Tuttavia, non è quello che sta accadendo nella realtà.

Se guardi le prime 2 voci nelle directory cercate:

#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

si vede che la directory include specifica del sistema finisce per trovarsi sopra la directory della libreria standard iniettata da Clang, motivo per cui viene math.htrovata la specifica del sistema , non quella nella stessa cartella delle altre intestazioni della libreria standard. Questo è probabilmente il caso perché se aggiungo esplicitamente la libreria standard include la directory alla mia riga di comando PRIMA delle altre due directory -isystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1il problema scompare e sono in grado di compilare il file. Non è quello che fa automaticamente il driver di Clang o qualsiasi altra cosa qui coinvolta: aggiunge quella directory standard della libreria tramite -internal-system(non sono sicuro di quale sia la semantica di quel flag interno) e la aggiunge DOPO la directory di sistema.

Ora, se guardi l'elenco delle directory ignorate, la prima voce in quell'elenco è:

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

di cui la c++/v1parte finale non esiste sulla mia macchina, facendomi chiedermi se l'installazione dell'SDK per iPhone avrebbe dovuto creare un collegamento simbolico c++all'interno della parte esistente del percorso per puntare alla /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++directory per far funzionare il tutto.

Ad ogni modo, questo è quello che penso stia accadendo e mi chiedo se qualcuno sappia come risolverlo correttamente?

Grazie!

PS Per il contesto:

$ 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

2

Utilizzando il comando:

gcc -Wp,-v -E -

la mia sequenza di ricerca #include <...>:

 /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 ragione dell'errore #include è descritta di seguito:

 - #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 correzione:

    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

Ho seguito l'opzione n. 2 e la build ora ha successo!

E grazie a Solodon per la risposta dettagliata. Ho seguito la risposta per risolvere il problema.


Ciao Niloy Datta! Ti suggerisco di modificare questa risposta rimuovendo la domanda da questa risposta e includere solo le risposte. Se hai una domanda, fai una domanda separata nel modo corretto in questa comunità.
Tiago Martins Peres

1
@TiagoMartinsPeres 李大仁, rimosso. Grazie.
Niloy Datta

Grazie amico, ha funzionato per me. Conosci un modo più pulito per affrontare questo problema?
Victor Sanchez

1

È possibile che la tua copia di Xcode sia danneggiata. Verifica con codesign:

codesign --verify /Applications/Xcode.app

Questo è successo a me e il problema è stato Xcode corrotto. La reinstallazione ha risolto il problema.

Qualcosa aveva modificato quanto segue:

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 era vuoto in tutti i posti sopra.


1

L'analisi di @ solodon è perfetta. È probabile che il cmathfile includa la versione errata di in math.hbase all'ordine di ricerca dei file di intestazione. Almeno, questo è quello che mi stava succedendo quando stavo ottenendo lo stesso errore.

Scansiona l'output del tuo compilatore per #include <...> search starts here:. Puoi anche forzare questo output dalla riga di comando con (source) :

gcc -Wp,-v -E -

Dovrebbe assomigliare a qualcosa di simile a questo:

 /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)

Si noti che i percorsi con Toolchainsvengono prima di quelli con Platforms. Se nel tuo caso l'ordine è invertito, devi capire cosa sta causando nella tua configurazione. Per me, era un'impostazione esplicita del CPLUS_INCLUDE_PATHmio script di accesso.

Codice offensivo:

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

Questo faceva parte del mio tentativo di aggirare Xcode 11 non fornendo più il pacchetto di installazione per i file di intestazione SDK. Dopo aver rimosso questo codice, sono stato in grado di includere correttamente cmathnel mio codice C ++.

Se sei venuto qui alla ricerca di soluzioni a questo problema, potresti aver bisogno di una soluzione diversa, ma speriamo che questo aiuti a far luce su quella che sembra essere la causa principale di questo problema, l'ordine del percorso di ricerca del file di intestazione.


0

Ho scoperto che all'interno del mio progetto ho un file math.h. Dopo averlo rinominato il problema era scomparso. Le cuciture cmathincludono il mio file anziché il sistema.


0

Ho appena ricevuto questo errore durante il tentativo di compilare gRPC dopo aver aggiornato di recente a 10.15.4 e Xcode 11.4 e ho iniziato a esaminare tutte le soluzioni offerte (qui e non riesco a compilare un programma C su un Mac dopo l'aggiornamento a Catalina 10.15 ) e ne ho provati alcuni (anche se non tentando di ricrearli in /usr/includequanto ciò violerebbe la separazione che Apple stava cercando di creare) - nulla sembrava funzionare.

Ho quindi esaminato attentamente le effettive invocazioni del complier che il makeprocesso stava producendo e ho notato che c'era un esplicito

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

che alla fine stava causando l'inclusione nell'ordine sbagliato - la rimozione di questo percorso di inclusione esplicita ha permesso alla compilazione di avere successo con un'installazione predefinita di catalina, Xcode e gli strumenti da riga di comando Xcode, come ci si aspetterebbe, nessun altro trucco / flag del compilatore necessario.


Ho riscontrato anche questo problema. Si scopre che alcunipkg-config file (ad esempio libcurl) di Homebrew aggiungono automaticamente questo percorso, anche se Xcode è installato. Questo problema è stato risolto in Homebrew 2.2.13. Maggiori dettagli su github.com/Homebrew/brew/issues/5068 ; Le PR che risolvono questo problema sono su github.com/Homebrew/brew/pull/7331 . TL; DR: aggiornamento homebrew
kkaefer

Sì, era un vecchio homebrew pkg_config per zlib che era ancora in qualche modo in giro, che lo stava causando per me - nonostante avessi un homebrew aggiornato e non abbia attualmente installato uno zlib comunque
pahjbo

0

È possibile provare a utilizzare l'SDK CommandLineTools anziché l'SDK XCode.app.

Risolvo questo problema durante la compilazione di 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

Inoltre, reinstallare XCode.app e CommandLineTools possono aiutare.


0

Riepilogo: nel mio caso, lo script di compilazione utilizzava una versione precedente di ios-cmaketoolchain (2.1.2) e l'aggiornamento a 3.1.2 risolto il problema di inclusione di cmath / math.

Adattare il comando elegante proposto da @Ryan H. gcc -Wp,-v -E -per il mio 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 -

rese su due Catalina di cui una vergine dove l'unico strumento mai installato è 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.

Quindi il percorso di inclusione corretto è il primo percorso non ignorato, tutto dovrebbe funzionare correttamente, ma non ha funzionato. Sembra che il problema provenga da un ulteriore comando include aggiunto alla chiamata di compilazione dalla toolchain 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
...

Il colpevole era la -Isystem ...linea, che causerà il #include <math>caricamento della riga errata nel file cmath. Dopo aver cercato in molti modi di risolvere gli script di cmake, ho notato la versione precedente di ios-cmake e l'aggiornamento ha avuto l'effetto "unico" di rimuovere gli indesiderati-Isystem linea : tutto il resto era quasi lo stesso (a parte qualche opzione del compilatore)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.