कैटालिना सी ++: <cmath> हेडर का उपयोग त्रुटि उत्पन्न करता है: वैश्विक नामस्थान में 'साइनबिट' नाम का कोई सदस्य नहीं


16

Mojave से कैटालिना में अपग्रेड करने के बाद, सेटअप: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MaccX10.15.sdk इनविट।

मैं एक प्रोग्राम को संकलित करने में असमर्थ हूं जो <cmath>हेडर का उपयोग करता है ।

मैंने MacLSDK स्थान को इंगित करने के लिए CFLAGS, CCFLAGS, CXXFLAGS को बदलने की कोशिश की जो कुछ भी नहीं बदलते हैं

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;

उदाहरण के लिए मैक्रो: islessवैश्विक नाम स्थान और मेरे कंप्यूटर पर मौजूद है:

 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 हेडर में यह भी शामिल है:

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

और मेरी कमांड लाइन का विकल्प है -isystem /usr/local/include

यह काम करना चाहिए ...


क्या xcode-select -pमैच जहां Xcode स्थित है? क्या आप using std::signbit;दूसरों के लिए भी कोड बदल सकते हैं? क्या आप C ++ 11 या बाद में संकलन कर रहे हैं?
एलिजा

C ++ 11 के रूप में संकलन करना। मैं कोड नहीं बदल सकता, यह एक बाहरी निर्भरता है! हाँ xcode-select -pमैच कहाँ XCodeस्थित है।
रोमन स्ज़ेरगबाम

यह अच्छा नहीं है। कोड करने की कोशिश कर रहा है using ::signbit;और प्रतीक वैश्विक नामस्थान में नहीं है, यह std::नामस्थान में है। मैं दूसरों के साथ भी ऐसा ही मानता हूं (मैंने उनका पीछा नहीं किया)।
एलयज

जवाबों:


7

मैं उत्सुक हूं: आप किस संकलक का उपयोग कर रहे हैं? का मूल्य क्या है CMAKE_OSX_SYSROOT?

मैं काफी आश्वस्त हूं कि यह गलत का परिणाम है CMAKE_OSX_SYSROOT। मुझे समस्या यह है कि आप क्लेंग के लिए अजगर बाइंडिंग का उपयोग करते समय वर्णन कर रहे हैं (जहां सीएमके संकलक कॉल का प्रबंधन नहीं करता है), लेकिन मैं सीएमके में त्रुटि को फिर से करने में कामयाब रहा:

set(CMAKE_OSX_SYSROOT "")  # Reset.

मैंने इस प्रश्न के उत्तर का पालन करके अपनी समस्या हल की: मैक कैटालिना को अपडेट करने के बाद c ++ कोड के साथ R संकुल को संकलित नहीं कर सकता

संक्षेप में: कैटालिना पर, /usr/includeएसआईपी द्वारा शुद्ध और संरक्षित किया जाता है। इस प्रकार, कोई भी परियोजना जो उम्मीद करती है कि सी हेडर वहाँ पाए जाएंगे संकलन करने में विफल रहेंगे। अगर मुझे सही से याद है, तो Apple उन परियोजनाओं की बग रिपोर्ट दर्ज करने की सिफारिश करता है जो C हेडर की अपेक्षा रखते हैं /usr/include

आपको उस कोड की बिल्ड प्रणाली को इंगित करना होगा जिसे आप सही हेडर में संकलित करने का प्रयास कर रहे हैं:

(1) सुनिश्चित करें कि Xcode तारीख तक है। वहाँ कोई कह रहा है कि कैटालिना पर एक पुराना एक्सकोड आपके निर्माण के माहौल के लिए क्या कर सकता है।

(2) -isysroot /sdk/pathकंपाइलर ध्वज का उपयोग करें , जहां /sdk/pathका परिणाम है xcrun --show-sdk-path। मुझे यकीन नहीं है कि सीएमके का सबसे अच्छा अभ्यास क्या है, लेकिन प्रयास करें

set(CMAKE_OSX_SYSROOT /sdk/path)

या

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

यदि यह समस्या हल करती है, तो आप सीएमके में इसे करने के लिए एक बेहतर तरीका तलाश सकते हैं।

बेशक, अगर आप साहसी हैं, तो आप एसआईपी को भी निष्क्रिय कर सकते हैं, जैसा कि मेरे प्रश्न के उत्तर में सुझाया गया है: / usr / जिसमें macOS कैटालिना (Xcode 11 के साथ) शामिल नहीं है


1
set(CMAKE_OSX_SYSROOT ...)में चला जाता है CMakeLists.txt, शेल नहीं।
mkl

6

IOS को लक्षित करने की कोशिश करते समय मुझे वही समस्या हो रही है (दोनों मेरे मैकबुक एयर और गिटहब एक्ट्स रनर पर) और यहां समस्या पर कुछ और विचार हैं, हालांकि मैं उचित समाधान का सुझाव देने के लिए Apple के पारिस्थितिकी तंत्र से परिचित नहीं हूं। मूल कमांड लाइन cpprestsdk में CMake से आ रही थी, लेकिन एक बार जब मैंने इसे आवश्यक रूप से उबाला, तो यहां एक छोटा प्रतिनिधि है।

  1. cmath-bug.cppइसमें एकमात्र लाइन के साथ फ़ाइल बनाएँ :
    #include <cmath>
  1. भागो (कुछ तर्कों के सामने नई कहानियाँ पढ़ने की सुविधा के लिए हैं, उन्हें हटा दें)
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

जब मैं इसे चलाता हूं, तो मैं एक ही मुद्दे का सामना कर रहे कई लोगों से परिचित हो जाता हूं:

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

केवल 2 में वे निर्देशिकाएं शामिल हैं जिन्हें मैं अपने मूल कमांड लाइन पर मौजूद करता हूं और हैं:

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

लेकिन यहाँ दिलचस्प बिट्स गैर-मौजूदा शामिल निर्देशिकाएं हैं जो इसे रिपोर्ट करती हैं और साथ ही साथ इसमें शामिल निर्देशिकाओं को अंत में और उनके क्रम को खोजती हैं। मेरा अनुमान है कि कमांड लाइन पर उल्लिखित अतिरिक्त निर्देशिकाओं को कुछ एप्पल-विशिष्ट तर्क के आधार पर एप्पल क्लैंग के ड्राइवर द्वारा डाला गया है।

आप रिपोर्ट की गई त्रुटि से देख सकते हैं कि <cmath>हेडर किस स्थान पर पाया गया है: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/cmathऔर इसकी 304 लाइन पर आप देख सकते हैं:

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

इस तथ्य से देखते हुए कि उसी फ़ोल्डर /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/में एक फ़ाइल math.hहै जो आवश्यक परिभाषा प्रदान करती है, जैसे:

#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

लेखकों से <cmath>उम्मीद की math.hजा रही थी कि पहले उसी फ़ोल्डर को शामिल किया जाए और फिर #include_next <math.h>निर्देश प्रणाली-विशेष को खोजे math.h। हालांकि वास्तविकता में ऐसा नहीं है।

यदि आप खोज की गई निर्देशिकाओं में पहले 2 प्रविष्टियों को देखते हैं:

#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

आप देखते हैं कि सिस्टम-विशिष्ट में डायरेक्ट्री क्लैंग-इंजेक्टेड स्टैंडर्ड लाइब्रेरी डायरेक्टरी से ऊपर है, यही वजह है कि सिस्टम-स्पेसिफिक math.hपाया जा रहा है, न कि बाकी स्टैंडर्ड हेडर के समान फोल्डर में। ऐसा होने की संभावना है क्योंकि अगर मैं स्पष्ट रूप से मानक पुस्तकालय को शामिल करता हूं तो निर्देशिका को मेरी कमांड लाइन में शामिल करें अन्य दो निर्देशिकाओं से पहले -isystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1समस्या दूर हो जाती है और मैं फ़ाइल को संकलित करने में सक्षम हूं। यही नहीं है कि क्लैंग का ड्राइवर या जो कुछ भी यहां शामिल है, वह स्वचालित रूप से करता है: यह उस मानक पुस्तकालय निर्देशिका को जोड़ता है -internal-system(यह सुनिश्चित नहीं करता है कि उस आंतरिक ध्वज का शब्दार्थ क्या है) और यह सिस्टम निर्देशिका के बाद इसे जोड़ता है।

अब यदि आप नजरअंदाज की गई निर्देशिकाओं की सूची देखें, तो उस सूची में पहली प्रविष्टि है:

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

जिनमें से अनुगामी c++/v1भाग मेरी मशीन पर मौजूद नहीं है, मुझे आश्चर्य होता है कि क्या iPhone SDK इंस्टॉलेशन c++पथ के मौजूदा भाग के अंदर एक प्रतीकात्मक लिंक बनाने के लिए चाहिए था /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++जो कि पूरी चीज़ को काम करने के लिए डायरेक्टरी को इंगित करने के लिए पथ के मौजूदा भाग के अंदर है ।

वैसे भी, मुझे लगता है कि यह हो रहा है और मुझे आश्चर्य है कि अगर किसी को पता है कि इसे ठीक से कैसे तय किया जाए?

धन्यवाद!

संदर्भ के लिए पुनश्च:

$ 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

1

यह संभव है कि आपकी Xcode की प्रति दूषित हो। कोडसाइन के साथ जांचें:

codesign --verify /Applications/Xcode.app

मेरे साथ ऐसा हुआ, और समस्या Xcode दूषित हो गई थी। इसे पुनः स्थापित कर रहा है।

कुछ ने निम्नलिखित को संशोधित किया था:

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 उपरोक्त सभी स्थानों में खाली था।


1

@ सोलोडॉन का विश्लेषण हाजिर है। समस्या यह है कि cmathफ़ाइल math.hहेडर फ़ाइलों के खोज क्रम पर आधारित गलत संस्करण सहित है । कम से कम, यह वही हो रहा था जब मुझे वही त्रुटि मिल रही थी।

के लिए अपने संकलक आउटपुट को स्कैन करें #include <...> search starts here:। आप इस आउटपुट को कमांड लाइन (स्रोत) से भी बाध्य कर सकते हैं :

gcc -Wp,-v -E -

यह कुछ इस तरह दिखना चाहिए:

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

ध्यान दें कि जिन रास्तों के साथ Toolchainsआने से पहले आते हैं Platforms। यदि आपके मामले में आदेश उलटा है, तो आपको यह पता लगाने की आवश्यकता है कि आपके कॉन्फ़िगरेशन में यह क्या कारण है। मेरे लिए, यह CPLUS_INCLUDE_PATHमेरी लॉगिन स्क्रिप्ट में एक स्पष्ट सेटिंग थी।

बंद कोड:

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

यह Xcode 11 के आसपास काम करने के मेरे प्रयास का हिस्सा था जो अब SDK हेडर फ़ाइलों के लिए इंस्टॉलेशन पैकेज प्रदान नहीं करता है। इस कोड को हटाने के बाद, मैं cmathअपने C ++ कोड को सफलतापूर्वक शामिल करने में सक्षम था ।

यदि आप इस समस्या के समाधान की तलाश में यहां आए हैं, तो आपको एक अलग समाधान की आवश्यकता हो सकती है, लेकिन उम्मीद है कि यह इस मुद्दे का मूल कारण प्रतीत होता है, हेडर फ़ाइल खोज पथ क्रम का मूल कारण है।


1

कमांड का उपयोग करना:

gcc -Wp,-v -E -

मेरा #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)

#Include त्रुटि का कारण नीचे वर्णित है:

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

जोड़:

    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 विकल्प का पालन किया है और निर्माण अब सफल है!

और विस्तृत उत्तर के लिए सोलोडन का धन्यवाद । मैंने समस्या को ठीक करने के लिए उत्तर का पालन किया।


हाय निलोय दत्ता! मेरा सुझाव है कि आप इस उत्तर को प्रश्न से हटाकर इस उत्तर को संपादित करें और केवल वही उत्तर शामिल करें। यदि आपके पास कोई प्रश्न है, तो अलग से उचित तरीके से पूछें, इस समुदाय में प्रश्न पूछे जाने चाहिए।
टियागो मार्टिंस पेरेस

1
@TiagoMartinsPeres ins ने इसे हटा दिया। धन्यवाद।
निलोय दत्ता

0

मैंने पाया कि मेरे प्रोजेक्ट के अंदर मेरे पास फाइल है math.h। नाम बदलने के बाद यह समस्या गायब हो गई थी। सीम cmathमें सिस्टम के बजाय मेरी फ़ाइल शामिल है।


0

हाल ही में 10.15.4 और Xcode 11.4 में अपग्रेड करने के बाद gRPC को संकलित करने का प्रयास करने पर मुझे यह त्रुटि मिली है और मैंने सभी समाधानों की पेशकश को देखना शुरू कर दिया है (यहाँ पर कैटालिना 10.15 में अपग्रेड करने के बाद मैक पर C प्रोग्राम संकलित नहीं कर सकता ) , और उनमें से कुछ की कोशिश की (हालांकि /usr/includeउस के रूप में फिर से बनाने की कोशिश नहीं कर रहा है कि अलगाव का उल्लंघन होगा कि Apple बनाने की कोशिश कर रहे थे) - कुछ भी काम नहीं लग रहा था।

मैंने तब वास्तविक वास्तविक इनवॉइस पर बारीकी से देखा, जो इस makeप्रक्रिया का उत्पादन कर रहा था और देखा कि एक स्पष्ट था

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

अंततः इसमें गलत क्रम में शामिल होने का कारण बन रहा था - इस स्पष्ट को हटाने में पथ शामिल करने की अनुमति दी गई जिसमें उत्प्रेरक, Xcode और Xcode कमांड-लाइन टूल्स की डिफ़ॉल्ट स्थापना के साथ सफल होने की अनुमति है, जैसा कि आप उम्मीद करेंगे, कोई अन्य ट्रिक्स / कंपाइलर झंडे जरूरत है।


मैं इस मुद्दे में भी भाग गया। यह पता चला है कि pkg-configHomebrew से कुछ फाइलें (जैसे libcurl) इस पथ को स्वचालित रूप से जोड़ देती हैं, भले ही आपके पास Xcode स्थापित हो। यह Homebrew 2.2.13 में तय किया गया था। Github.com/Homebrew/brew/issues/5068 में अधिक जानकारी ; PR जो इसे ठीक करता है वह github.com/Homebrew/brew/pull/7331 में है । टीएल; डीआर: अपडेट
होमब्रेव

हाँ, यह zlib के लिए एक पुराना homebrew pkg_config था जो अभी भी किसी तरह से पड़ा हुआ था, जो कि मेरे लिए यह कारण था - आज तक homebrew अप करने के बावजूद और वर्तमान में zlib स्थापित नहीं होने के बावजूद
pahjboj

0

आप XCode.app SDK के बजाय CommandLineTools SDK का उपयोग करने का प्रयास कर सकते हैं।

मैं इस समस्या को ठीक करता हूं जब मैं पॉइंटक्लाउडलॉइल्स (पीसीएल) का संकलन करता हूं

#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

इसके अलावा, XCode.app और CommandLineTools को पुनर्स्थापित करने में मदद मिल सकती है।


0

सारांश: मेरे मामले में, बिल्ड स्क्रिप्ट ios-cmakeटूलकिन (2.1.2) के पुराने संस्करण का उपयोग कर रही थी , और इसे अद्यतन करने के लिए 3.1.2 तय किया गया कि cmath / गणित में समस्या शामिल है।

gcc -Wp,-v -E -मेरे मामले के लिए @ आर। एच। द्वारा प्रस्तावित निफ्टी कमांड को अपनाना ( क्लैंग , सी ++, आईओएस लक्ष्य)

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

दो कैटलिना पर पैदावार जिसमें एक कुंवारी भी शामिल है, जहां केवल उपकरण कभी स्थापित होता है 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.

इसलिए सही शामिल पथ पहला गैर-उपेक्षित एक है, सब कुछ ठीक काम करना चाहिए, लेकिन यह नहीं किया। ऐसा लगता है कि यह समस्या आईओएस-सेमी-टूलकिन द्वारा संकलन कॉल में संलग्न एक अतिरिक्त शामिल कमांड से आई है:

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

अपराधी वह रेखा -Isystem ...थी, जो #include <math>गलत फ़ाइल लोड करने के लिए cmath फ़ाइल में लाइन का कारण बनेगी। सीमेक स्क्रिप्ट्स को ठीक करने की कोशिश करने के आसपास बहुत कुछ गड़बड़ होने के बाद, मैंने आईओएस-सीमेक के पुराने संस्करण को देखा, और इसे अपडेट करने से अवांछित -Isystemलाइन को हटाने का 'केवल' प्रभाव पड़ा - बाकी सब कुछ लगभग समान था (कुछ संकलक विकल्प के अलावा)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.