Catalina C ++: <cmath> üstbilgilerini kullanma hatası veriyor: global ad alanında 'signbit' adlı üye yok


16

Mojave'den Catalina'ya yükseltme yaptıktan sonra Kurulum: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk env.

<cmath>Üstbilgi kullanan bir programı derleyemiyorum.

Hiçbir şeyi değiştirmeyen MacOSSDK Konumuna işaret etmek için CFLAGS, CCFLAGS, CXXFLAGS değiştirmeyi denedim

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;

Örneğin, makro: islessgenel ad alanında ve bilgisayarımda bulunur:

 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

Cmath başlığı bile şunları içerir:

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

Ve komut satırımın seçeneği var -isystem /usr/local/include

Bu çalışmalı...


Mu xcode-select -pXcode bulunduğu maç? Kodu using std::signbit;diğerlerine benzer şekilde değiştirebilir misiniz ? C ++ 11 veya üstü olarak mı derliyorsunuz?
Eljay

C ++ 11 olarak derleme. Kodu değiştiremiyorum, bu bir dış bağımlılıklar! evet xcode-select -pbulunduğu yerde eşleşir XCode.
roman Sztergbaum

Bu iyi değil. Kod yapmaya çalışıyor using ::signbit;ve sembol genel ad alanında değil, std::ad alanında. Ben de diğerleri ile aynı şekilde varsayıyorum (onları kovalamamıştım).
Eljay

Yanıtlar:


7

Merak ediyorum: Hangi derleyiciyi kullanıyorsunuz? Değeri nedir CMAKE_OSX_SYSROOT?

Bunun bir yanlışın sonucu olduğuna oldukça ikna oldum CMAKE_OSX_SYSROOT. Clang (burada CMake derleyici çağrısını yönetmez) için python bağlamaları kullanırken açıkladığınız bir sorun vardı, ancak yaparak CMake'de hatayı yeniden oluşturmayı başardım:

set(CMAKE_OSX_SYSROOT "")  # Reset.

Bu sorunun yanıtlarını takip ederek sorunumu çözdüm: macOS Catalinana güncelledikten sonra R ++ ile c ++ kodu derleyemiyorum .

Özetlemek gerekirse: Catalina'da /usr/includeSIP tarafından temizlenir ve korunur. Böylece, C başlıklarının orada bulunmasını bekleyen herhangi bir proje derlenemez. Doğru hatırlarsam Apple, C üstbilgileri bekleyen projelere hata raporları göndermenizi önerir /usr/include.

Derlemeye çalıştığınız kodun derleme sistemini doğru başlıklara yönlendirmelisiniz:

(1) Xcode'un güncel olduğundan emin olun. Catalina üzerindeki eski bir Xcode'un yapı ortamınıza neler yapabileceğini söylemiyor.

(2) Sonuç -isysroot /sdk/patholduğu derleyici bayrağını kullanın . CMake'in en iyi uygulamasının ne olduğundan emin değilim, ama yapmayı deneyin/sdk/pathxcrun --show-sdk-path

set(CMAKE_OSX_SYSROOT /sdk/path)

veya

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

Bu sorunu çözerse, CMake'de bunu yapmanın daha iyi bir yolunu bulmak isteyebilirsiniz.

Tabii ki, maceraperestseniz, sorumun cevabında önerildiği gibi SIP'yi de devre dışı bırakabilirsiniz: / usr / macOS Catalina'da eksik (Xcode 11 ile)


1
set(CMAKE_OSX_SYSROOT ...)CMakeLists.txtkabuk içine girmez.
mkl

6

İOS'u hedeflemeye çalışırken aynı sorunu yaşıyorum (hem MacBook Air'imde hem de GitHub Actions koşucusunda) ve burada uygun bir çözüm önermek için Apple'ın ekosistemine yeterince aşina olmasam da sorun hakkında birkaç düşünce daha var. Orijinal komut satırı cpprestsdk'deki CMake'ten geliyordu, ancak bir kez gerekli olanlara kadar kaynattığımda, kısa bir repro.

  1. cmath-bug.cppİçinde tek satır bulunan bir dosya oluşturun :
    #include <cmath>
  1. Çalıştır (bazı argümanların önündeki satırlar okuma kolaylığı içindir, kaldırılır)
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

Ben çalıştırdığımda, aynı sorunla karşı karşıya birçok tanıdık olsun:

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;
      ~~^

Orijinal komut satırına ilettiğim yalnızca 2 dizin var ve bunlar:

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

Ancak buradaki ilginç bitler, rapor ettiği mevcut olmayan dizinlerin yanı sıra sonunda arama yaptığı sonuç dizinlerini ve sıralarını içerir. Benim tahminim, komut satırında belirtilmeyen ek dizinlerin Apple'a özgü bazı mantık temelinde Apple Clang sürücüsü tarafından eklenmiş olmasıdır.

Bildirilen hatadan <cmath>başlığın şu konumda /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/cmatholduğunu görebilirsiniz: 304 satırında görebilirsiniz:

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

Aynı klasörde gerekli tanımları sağlayan /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/bir dosya math.holduğu gerçeğinden yola çıkarak , örneğin:

#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

yazarları önce aynı klasörden eklenmesini <cmath>beklediler math.hve daha sonra #include_next <math.h>yönerge sisteme özgü buluyorlardı math.h. Ancak gerçekte olan bu değildir.

Aranan dizinlerdeki ilk 2 girişe bakarsanız:

#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

sisteme özel içerme dizininin Clang enjekte edilmiş standart kütüphane dizininin üstünde olduğunu görürsünüz, bu yüzden sisteme özgü math.hbulunur, standart kütüphane başlıklarının geri kalanıyla aynı klasörde değil. Bu açıkça çünkü diğer iki dizin ÖNCE standart kütüphane dahil dizin benim komut satırına eklemek eğer -isystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1sorun gider ve dosyayı derlemek mümkün. Clang'ın sürücüsünün veya burada yer alan her şeyin otomatik olarak yaptığı şey bu değildir: bu standart kütüphane dizinini ekler -internal-system(bu dahili bayrağın anlamının ne olduğundan emin değil) ve sistem dizininden SONRA ekler.

Yoksayılan dizinlerin listesine bakarsanız, bu listedeki ilk girdi şu şekildedir:

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

Bu işlemin sondaki c++/v1kısmı makinemde mevcut değil, bu da iPhone SDK kurulumunun, her şeyi işler hale getirmek c++için /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++dizine işaret etme yolunun mevcut bölümünde sembolik bir bağlantı oluşturup oluşturmayacağını merak etmemi sağladı.

Her neyse, bence bu oluyor ve merak ediyorum kimse nasıl düzgün düzeltmek için biliyor?

Teşekkür ederim!

PS İçerik için:

$ 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

Komutunu kullanarak:

gcc -Wp,-v -E -

#include <...> arama dizimi:

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

#İnclude hatasının nedeni aşağıda açıklanmıştır:

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

Çözüm:

    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

# 2 seçeneğini takip ettim ve derleme şimdi başarılı!

Ve ayrıntılı cevap için solodon'a teşekkürler . Sorunu çözmek için cevabı takip ettim.


Merhaba Niloy Datta! Soruyu bu yanıttan kaldırarak bu yanıtı düzenlemenizi ve yalnızca hangi yanıtları eklemenizi öneririm. Bir sorunuz varsa, bu toplulukta soruların sorulması için uygun şekilde ayrı ayrı sorun.
Tiago Martins Peres 李大仁

1
@TiagoMartinsPeres 李大仁, kaldırdı. Teşekkürler.
Niloy Datta

Teşekkürler dostum, benim için çalıştı. Bu sorunla başa çıkmanın daha temiz bir yolunu biliyor musunuz?
Victor Sanchez

1

Xcode kopyanız bozulmuş olabilir. Kod işaretiyle kontrol edin:

codesign --verify /Applications/Xcode.app

Bu bana oldu ve sorun Xcode bozuldu. Yeniden yükleme sorunu çözüldü.

Bir şey aşağıdakileri değiştirmişti:

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 yukarıdaki tüm yerlerde boştu.


1

@ solodon'un analizi yerinde. Sorun büyük olasılıkla cmathdosyanın yanlış sürümünü içeriyor olmasımath.h üstbilgi dosyalarının arama sırasına göre içermesidir. En azından aynı hatayı aldığımda başıma gelen buydu.

Derleyici çıktınızı tarayın #include <...> search starts here:. Bu çıktıyı komut satırından (source) ile de zorlayabilirsiniz :

gcc -Wp,-v -E -

Bunun gibi bir şeye benzemeli:

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

İle yollardan Toolchainsöncekilere dikkat edin Platforms. Durumunuz tersine çevrilirse, yapılandırmanızda buna neyin neden olduğunu bulmanız gerekir. Benim için, CPLUS_INCLUDE_PATHgiriş komut dosyamda açık bir ayar vardı .

Sorunlu kod:

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

Bu, artık SDK başlık dosyaları için yükleme paketi sağlamayan Xcode 11 üzerinde çalışma girişimimin bir parçasıydı. Bu kodu kaldırdıktan sonra başarıyla cmathC ++ koduma dahil edebildi .

Bu soruna çözüm bulmak için buraya geldiyseniz, farklı bir çözüm gerekebilir, ancak umarım bu, bu sorunun temel nedeni olan başlık dosyası arama yolu sırasına ışık tutmaya yardımcı olur.


0

Projemin içinde dosyam olduğunu gördüm math.h. Yeniden adlandırdıktan sonra sorun ortadan kalktı. Dikişler cmathsistem yerine dosyamı içerir.


0

Son zamanlarda 10.15.4 ve Xcode 11.4'e yükselttikten sonra gRPC'yi derlemeye çalışırken bu hatayı aldım ve sunulan tüm çözümlere bakmaya başladım (burada ve Catalina 10.15'e yükselttikten sonra Mac'te bir C programı derleyemiyorum ) ve bunlardan birkaçını denedi ( /usr/includeApple'ın yaratmaya çalıştığı ayrılığı ihlal edecek şekilde yeniden yaratmaya çalışmamaya rağmen ) - hiçbir şey işe yaramadı.

Daha sonra, make sürecin ürettiği ve açık bir şekilde

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

Bu, sonuçların yanlış sırada gerçekleşmesine neden oldu - bu açık dahil yolunun kaldırılması, derlemenin varsayılan bir catalina, Xcode ve Xcode komut satırı araçlarının yüklemesiyle başarılı olmasını sağladı, beklediğiniz gibi başka hileler / derleyici bayrakları yok gerekli.


Ben de bu sorunla karşılaştım. pkg-configHomcode'un bazı dosyalarının (örn. Libcurl), Xcode yüklü olsa bile bu yolu otomatik olarak eklediği ortaya çıkıyor . Bu Homebrew 2.2.13'te düzeltildi. Daha fazla bilgi github.com/Homebrew/brew/issues/5068 ; Bunu düzelten halkla ilişkiler github.com/Homebrew/brew/pull/7331 adresindedir . TL; DR: Homebrew'u güncelleyin
kkaefer

Evet, zlib için eski bir homebrew pkg_config, hala bir şekilde yalan söylüyordu, bu benim için neden oluyordu - güncel bir homebrew olmasına ve şu anda zaten bir zlib yüklü olmamasına rağmen
pahjbo

0

XCode.app SDK yerine CommandLineTools SDK'yı kullanmayı deneyebilirsiniz.

PointCloudLibrary (PCL) derlerken bu sorunu gidermek

#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

Ayrıca, XCode.app yeniden yükleyin ve CommandLineTools yardımcı olabilir.


0

Özet: benim durumumda, derleme betiği eski bir toolchain sürümü ios-cmake(2.1.2) kullanıyordu ve 3.1.2 olarak güncellenmesi cmath / math içerme sorununu düzeltti.

gcc -Wp,-v -E -Benim durumum için @Ryan H. tarafından önerilen şık komutun uyarlanması (clang, c ++, iOs target)

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

şimdiye kadar kurulu sadece XCode 11.14.1 olan bakire bir de dahil olmak üzere iki Catalina verir:

 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.

Bu nedenle, doğru dahil etme yolu yoksayılan ilk yol, her şey yolunda olmalı, ama olmadı. Sorun, ios-cmake araç zincirinin derleme çağrısına eklenen ek bir içerme komutundan geldi gibi görünüyor:

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

Suçlu, cmath dosyasındaki satırın yanlış dosyayı yüklemesine -Isystem ...neden olacak #include <math>satırdı. Cmake betiklerini düzeltmeye çalışırken çok uğraştıktan sonra, ios-cmake'in eski versiyonunu fark ettim ve güncelleme, istenmeyen -Isystemsatırı kaldırma 'tek' etkiye sahipti - diğer her şey neredeyse aynıydı (birkaç derleyici seçeneğinin dışında)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.