Catalina C ++: การใช้ <cmath> ส่วนหัวให้ข้อผิดพลาด: ไม่มีสมาชิกชื่อ 'signbit' ในเนมสเปซส่วนกลาง


16

หลังจากอัปเกรดเป็น Catalina จากโมฮาวีการตั้งค่า: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk ใน env

ฉันไม่สามารถคอมไพล์โปรแกรมที่ใช้<cmath>ส่วนหัว

ฉันลองเปลี่ยน CFLAGS, CCFLAGS, CXXFLAGS ให้ชี้ไปที่ตำแหน่ง MacOSSDK ที่ไม่เปลี่ยนแปลงอะไรเลย

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 หรือใหม่กว่าหรือไม่
Eljay

คอมไพล์เป็น C ++ 11 ฉันไม่สามารถเปลี่ยนรหัสได้มันเป็นการอ้างอิงภายนอก! ใช่xcode-select -pตรงกับที่XCodeตั้งของ
โรมัน Sztergbaum

นั่นไม่ดีเลย รหัสกำลังพยายามทำusing ::signbit;และสัญลักษณ์ไม่ได้อยู่ในเนมสเปซส่วนกลาง แต่อยู่ในstd::เนมสเปซ ฉันคิดเช่นเดียวกันกับคนอื่น ๆ (ฉันไม่ได้ไล่พวกเขาลง)
Eljay

คำตอบ:


7

ฉันอยากรู้: คุณใช้คอมไพเลอร์อะไร? มูลค่าของCMAKE_OSX_SYSROOTอะไร

CMAKE_OSX_SYSROOTผมค่อนข้างเชื่อว่านี้เป็นผลมาจากการที่ไม่ถูกต้อง ฉันมีปัญหาที่คุณอธิบายเมื่อใช้การผูก python สำหรับ clang (ที่ CMake ไม่จัดการการเรียกคอมไพเลอร์) แต่ฉันจัดการเพื่อสร้างข้อผิดพลาดใน CMake อีกครั้งโดยทำ:

set(CMAKE_OSX_SYSROOT "")  # Reset.

ฉันจะแก้ไขปัญหาของฉันโดยต่อไปนี้คำตอบของคำถามนี้: แพคเกจ R ไม่สามารถรวบรวมกับรหัส C ++ หลังจากการปรับปรุงเพื่อ MacOS Catalina

ในการสรุป: บน Catalina ได้/usr/includeรับการล้างและป้องกันโดย SIP ดังนั้นโครงการใด ๆ ที่คาดว่าจะพบส่วนหัว C จะไม่สามารถรวบรวมได้ ถ้าผมจำไม่ผิด, /usr/includeแอปเปิ้ลแนะนำให้รายงานข้อผิดพลาดไฟล์ไปยังโครงการที่คาดว่าส่วนหัวของซีใน

คุณต้องชี้ระบบการสร้างของรหัสที่คุณกำลังพยายามรวบรวมไปยังส่วนหัวที่ถูกต้อง:

(1) ตรวจสอบว่า Xcode เป็นรุ่นล่าสุดแล้ว ไม่มีการบอกว่า Xcode ที่ล้าสมัยใน Catalina อาจทำอะไรกับสภาพแวดล้อมการสร้างของคุณ

(2) ใช้-isysroot /sdk/pathธงคอมไพเลอร์ที่เป็นผลมาจาก/sdk/path xcrun --show-sdk-pathฉันไม่แน่ใจว่าวิธีที่ดีที่สุดของ CMake คืออะไร แต่ลองทำดู

set(CMAKE_OSX_SYSROOT /sdk/path)

หรือ

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

หากวิธีนี้แก้ไขปัญหาได้คุณอาจต้องการหาวิธีที่ดีกว่าในการทำ CMake

แน่นอนถ้าคุณชอบผจญภัยคุณสามารถปิดการใช้งาน SIP ได้ตามที่แนะนำในคำตอบสำหรับคำถามของฉัน: / usr / include ที่หายไปใน macOS Catalina (พร้อม Xcode 11)


1
set(CMAKE_OSX_SYSROOT ...)เข้าไปในCMakeLists.txtไม่ใช่เปลือก
mkl

6

ฉันมีปัญหาเดียวกันในขณะที่พยายามกำหนดเป้าหมาย iOS (ทั้งใน MacBook Air และ GitHub Actions Runner) และนี่คือความคิดเพิ่มเติมเล็กน้อยเกี่ยวกับปัญหาแม้ว่าฉันจะไม่คุ้นเคยกับระบบนิเวศของ Apple เพื่อแนะนำวิธีแก้ปัญหาที่เหมาะสม บรรทัดคำสั่งดั้งเดิมมาจาก CMake ใน cpprestsdk แต่เมื่อฉันต้มลงไปถึงสิ่งจำเป็นนี่เป็นข้อผิดพลาดสั้น ๆ

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

แต่บิตที่น่าสนใจที่นี่คือไดเรกทอรีรวมที่ไม่มีอยู่ซึ่งรายงานและไดเรกทอรีรวมที่จะสิ้นสุดการค้นหาในที่สุดและลำดับของพวกเขา ฉันเดาว่าไดเรกทอรีเพิ่มเติมที่ไม่ได้กล่าวถึงในบรรทัดคำสั่งจะถูกแทรกโดยไดรเวอร์ของ Apple Clang ตามตรรกะเฉพาะของ Apple

คุณสามารถดูจากข้อผิดพลาดที่รายงานที่<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

คุณเห็นว่าไดเรกทอรีรวมระบบเฉพาะนั้นอยู่เหนือไดเรกทอรีไดเรกทอรีมาตรฐาน Clang-injected ซึ่งเป็นสาเหตุที่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++ไดเรกทอรีเพื่อให้สิ่งต่าง ๆ ทำงานได้หรือไม่

อย่างไรก็ตามนี่คือสิ่งที่ฉันคิดว่าจะเกิดขึ้นและฉันสงสัยว่าใครรู้วิธีการแก้ไขอย่างถูกต้องหรือไม่

ขอบคุณ!

PS สำหรับบริบท:

$ 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

ใช้คำสั่ง:

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 ตัวเลือกและงานสร้างก็สำเร็จแล้ว!

และขอขอบคุณโซโลมอนสำหรับคำตอบโดยละเอียด ฉันทำตามคำตอบเพื่อแก้ไขปัญหา


สวัสดี Niloy Datta! ฉันขอแนะนำให้คุณแก้ไขคำตอบนี้เพื่อลบคำถามออกจากคำตอบนี้และรวมเฉพาะคำตอบเท่านั้น หากคุณมีคำถามให้ถามแยกต่างหากในวิธีการที่เหมาะสมควรถามคำถามในชุมชนนี้
Tiago Martins Peres 李大仁

1
@TiagoMartinsPeres 李大仁ลบออกแล้ว ขอบคุณ
Niloy Datta

ขอบคุณชายมันใช้งานได้สำหรับฉัน คุณรู้วิธีที่สะอาดกว่าในการจัดการกับปัญหานี้หรือไม่?
Victor Sanchez

1

เป็นไปได้ว่าสำเนา Xcode ของคุณเสียหาย ตรวจสอบกับ codesign:

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

การวิเคราะห์ @ solodon เป็นจุดบน ปัญหาน่าจะเป็นที่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 ++ ของฉันได้สำเร็จ

หากคุณมาที่นี่เพื่อค้นหาวิธีแก้ไขปัญหานี้คุณอาจต้องการโซลูชันที่แตกต่างกัน แต่หวังว่านี่จะช่วยให้เข้าใจถึงสาเหตุที่แท้จริงของปัญหานี้และเส้นทางการค้นหาไฟล์ส่วนหัว


0

math.hฉันพบว่าภายในโครงการของฉันฉันมีไฟล์ หลังจากเปลี่ยนชื่อปัญหาแล้วก็หายไป ตะเข็บcmathรวมไฟล์ของฉันไว้แทนระบบ


0

ฉันเพิ่งได้รับข้อผิดพลาดนี้เมื่อพยายามรวบรวม gRPC หลังจากอัปเกรดเป็น 10.15.4 และ Xcode 11.4 และฉันเริ่มดูโซลูชันทั้งหมดที่มีให้ (ที่นี่และไม่สามารถรวบรวมโปรแกรม C บน Mac หลังจากอัปเกรดเป็น Catalina 10.15 ) และลองสักสองสาม (แม้ว่าจะไม่พยายามสร้างใหม่/usr/includeเพราะเป็นการละเมิดการแยกที่ Apple พยายามสร้าง) - ดูเหมือนว่าจะไม่มีอะไรเกิดขึ้น

จากนั้นฉันดูอย่างใกล้ชิดกับการเรียกร้องค่าคอมมิชชันที่เกิดขึ้นจริงว่าmakeกระบวนการผลิตและสังเกตเห็นว่ามีความชัดเจน

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

ที่ทำให้เกิดการรวมเกิดขึ้นในลำดับที่ไม่ถูกต้อง - การลบพา ธ รวมที่ชัดเจนนี้ทำให้การรวบรวมสำเร็จด้วยการติดตั้ง catalina เริ่มต้น, Xcode และเครื่องมือบรรทัดคำสั่ง Xcode อย่างที่คุณคาดไว้ไม่มีธงลูกเล่น / คอมไพเลอร์อื่น ๆ จำเป็น


ฉันพบปัญหานี้เช่นกัน ปรากฎว่ามีpkg-configไฟล์บางไฟล์ (เช่น libcurl) จาก Homebrew เพิ่มพา ธ นี้โดยอัตโนมัติแม้ว่าคุณจะติดตั้ง Xcode แล้วก็ตาม สิ่งนี้ได้รับการแก้ไขใน Homebrew 2.2.13 รายละเอียดเพิ่มเติมในgithub.com/Homebrew/brew/issues/5068 ; ประชาสัมพันธ์ที่แก้ไขนี้คือในgithub.com/Homebrew/brew/pull/7331 TL; DR: อัปเดต homebrew
kkaefer

ใช่มันเป็น homebrew เก่า pkg_config สำหรับ zlib ที่ยังคงนอนอยู่รอบ ๆ นั่นทำให้เกิดสิ่งนี้สำหรับฉัน - แม้จะมี homebrew ที่ทันสมัยและไม่ได้ติดตั้ง zlib ต่อไปในปัจจุบัน
pahjbo

0

คุณอาจลองใช้ CommandLineTools SDK แทน XCode.app SDK

ฉันแก้ไขปัญหานี้เมื่อฉันรวบรวม 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

นอกจากนี้การติดตั้ง XCode.app และ CommandLineTools อีกครั้งอาจช่วยได้


0

สรุป: ในกรณีของฉันสคริปต์ios-cmakeบิลด์ใช้ toolchain รุ่นเก่ากว่า(2.1.2) และอัปเดตเป็น 3.1.2 แก้ไขปัญหาการรวม cmath / math

การปรับคำสั่ง nifty ที่เสนอโดย @Ryan H. gcc -Wp,-v -E -สำหรับกรณีของฉัน (เป้าหมายเสียงดังกราว, c ++, iOs)

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

ให้ผลตอบแทนกับ Catalina สองตัวรวมถึงตัวบริสุทธิ์ที่เคยติดตั้งเครื่องมือเพียงอย่างเดียวคือ 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.

ดังนั้นเส้นทางรวมที่ถูกต้องจึงเป็นเส้นทางที่ไม่ถูกเพิกเฉยเป็นครั้งแรกทุกอย่างควรทำงานได้ดี แต่ไม่ได้ผล ดูเหมือนว่าปัญหามาจากคำสั่ง include เพิ่มเติมซึ่งผนวกเข้ากับการเรียกการคอมไพล์โดย toolos 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
...

ผู้ร้ายคือ-Isystem ...สายซึ่งจะทำให้#include <math>สายในไฟล์ cmath สิ้นสุดการโหลดไฟล์ผิด หลังจากเล่นซอไปเรื่อย ๆ เพื่อพยายามแก้ไขสคริปต์ cmake ฉันสังเกตเห็นเวอร์ชันเก่ากว่าของ ios-cmake และการอัปเดตจะมีผลเพียง 'เท่านั้น' ในการลบ-Isystemบรรทัดที่ไม่ต้องการออก- ทุกอย่างก็เหมือนเดิม (นอกเหนือจากตัวเลือกคอมไพเลอร์เล็กน้อย)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.