Catalina C ++: Sử dụng lỗi tiêu đề <cmath>: không có thành viên nào có tên 'Signbit' trong không gian tên toàn cầu


16

Sau khi nâng cấp lên Catalina từ Mojave, Thiết lập: /Appluggest/Xcode.app/Contents/Developer/Plevelops/MacOSX.pl platform / Developer / DDKs / MacOSX10.15.sdk trong env.

Tôi không thể biên dịch chương trình sử dụng <cmath>tiêu đề.

Tôi đã thử thay đổi CFLAGS, CCFLAGS, CXXFLAGS để trỏ đến Vị trí MacOSSDK không thay đổi gì

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;

ví dụ macro: islesshiện diện trong không gian tên toàn cầu và trên máy tính của tôi:

 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

Ngay cả tiêu đề cmath cũng bao gồm nó:

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

Và dòng lệnh của tôi có tùy chọn -isystem /usr/local/include

Điều này sẽ làm việc ...


xcode-select -pkhớp với vị trí Xcode không? Bạn có thể thay đổi mã thành using std::signbit;, tương tự cho những người khác? Bạn đang biên dịch như C ++ 11 trở lên?
Eljay

Biên dịch thành C ++ 11. Tôi không thể thay đổi mã, đó là một phụ thuộc bên ngoài! có xcode-select -pphù hợp nơi XCodeđược đặt.
roman Sztergbaum

Điều đó không tốt. Mã đang cố gắng thực hiện using ::signbit;và biểu tượng không nằm trong không gian tên toàn cầu, nó nằm trong std::không gian tên. Tôi cũng đoán như vậy với những người khác (tôi đã không đuổi theo họ).
Eljay

Câu trả lời:


7

Tôi tò mò: Bạn đang sử dụng trình biên dịch nào? Giá trị của CMAKE_OSX_SYSROOTcái gì?

Tôi khá tin rằng đây là kết quả của một sai lầm CMAKE_OSX_SYSROOT. Tôi đã gặp sự cố mà bạn mô tả khi sử dụng liên kết python cho clang (trong đó CMake không quản lý lệnh gọi trình biên dịch), nhưng tôi đã quản lý để tạo lại lỗi trong CMake bằng cách thực hiện:

set(CMAKE_OSX_SYSROOT "")  # Reset.

Tôi đã giải quyết vấn đề của mình bằng cách làm theo các câu trả lời cho câu hỏi này: Không thể biên dịch các gói R bằng mã c ++ sau khi cập nhật lên macOS Catalina .

Tóm lại: Trên Catalina, /usr/includeđược SIP thanh trừng và bảo vệ. Do đó, bất kỳ dự án nào mong đợi các tiêu đề C được tìm thấy ở đó sẽ không biên dịch được. Nếu tôi nhớ không lầm, Apple khuyến cáo để báo cáo lỗi tập tin cho các dự án mong đợi header C trong /usr/include.

Bạn phải trỏ hệ thống xây dựng mã mà bạn đang cố biên dịch sang đúng tiêu đề:

(1) Đảm bảo Xcode được cập nhật. Không có gì để nói Xcode lỗi thời trên Catalina có thể làm gì với môi trường xây dựng của bạn.

(2) Sử dụng -isysroot /sdk/pathcờ trình biên dịch, /sdk/pathkết quả của xcrun --show-sdk-path. Tôi không chắc thực hành tốt nhất của CMake là gì, nhưng hãy thử làm

set(CMAKE_OSX_SYSROOT /sdk/path)

hoặc là

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

Nếu điều đó giải quyết được vấn đề, bạn có thể muốn tìm kiếm một cách tốt hơn để làm điều này trong CMake.

Tất nhiên, nếu bạn thích phiêu lưu, bạn cũng có thể tắt SIP, như được đề xuất trong câu trả lời cho câu hỏi của tôi: / usr / bao gồm thiếu trên macOS Catalina (với Xcode 11)


1
set(CMAKE_OSX_SYSROOT ...)đi vào CMakeLists.txt, không phải vỏ.
mkl

6

Tôi đang gặp vấn đề tương tự khi cố gắng nhắm mục tiêu iOS (cả trên MacBook Air và trên trình chạy GitHub Action) và đây là một vài suy nghĩ về vấn đề này mặc dù tôi không đủ quen thuộc với hệ sinh thái của Apple để đề xuất một giải pháp phù hợp. Dòng lệnh ban đầu đến từ CMake trong cpprestsdk, nhưng một khi tôi đã đun sôi nó xuống các yếu tố cần thiết, thì đây là một lời trách móc ngắn.

  1. Tạo tập tin cmath-bug.cppvới dòng duy nhất trong đó:
    #include <cmath>
  1. Chạy (dòng mới trước một số đối số là để đọc thuận tiện, loại bỏ chúng)
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

Khi tôi chạy nó, tôi quen với nhiều người phải đối mặt với cùng một vấn đề:

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 duy nhất bao gồm các thư mục tôi truyền vào dòng lệnh ban đầu của tôi tồn tại và là:

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

Nhưng các bit thú vị ở đây là các thư mục bao gồm không tồn tại mà nó báo cáo cũng như các thư mục bao gồm cuối cùng nó tìm kiếm và thứ tự của chúng. Tôi đoán là các thư mục bổ sung không được đề cập trên dòng lệnh được trình điều khiển của Apple Clang chèn vào dựa trên một số logic cụ thể của Apple.

Bạn có thể thấy từ lỗi được báo cáo rằng <cmath>tiêu đề được tìm thấy tại: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/cmathvà tại dòng 304 của nó, bạn có thể thấy:

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

Đánh giá từ thực tế là trong cùng một thư mục /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/có một tệp math.hcung cấp các định nghĩa cần thiết, ví dụ:

#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

các tác giả <cmath>đã mong đợi math.htừ cùng một thư mục được đưa vào trước và sau đó #include_next <math.h>chỉ thị tìm hệ thống cụ thể math.h. Đó không phải là những gì đang xảy ra trong thực tế.

Nếu bạn nhìn vào 2 mục đầu tiên trong thư mục tìm kiếm:

#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

bạn thấy rằng thư mục bao gồm dành riêng cho hệ thống kết thúc ở trên thư mục thư viện chuẩn được tiêm Clang, đó là lý do tại sao math.htìm thấy cụ thể hệ thống , không phải là thư mục trong cùng thư mục với phần còn lại của các tiêu đề thư viện chuẩn. Đây có thể là trường hợp bởi vì nếu tôi thêm thư viện tiêu chuẩn bao gồm thư mục vào dòng lệnh của tôi TRƯỚC hai thư -isystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1mục khác thì vấn đề sẽ biến mất và tôi có thể biên dịch tệp. Đó không phải là những gì trình điều khiển của Clang hoặc bất cứ điều gì khác có liên quan ở đây tự động: nó thêm thư mục thư viện tiêu chuẩn đó thông qua -internal-system(không chắc ngữ nghĩa của cờ nội bộ đó) và nó thêm SAU thư mục hệ thống.

Bây giờ nếu bạn nhìn vào danh sách các thư mục bị bỏ qua, mục đầu tiên trong danh sách đó là:

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

trong đó phần đuôi c++/v1không tồn tại trên máy của tôi, khiến tôi tự hỏi liệu cài đặt SDK iPhone có được cho là tạo một liên kết tượng trưng c++bên trong phần hiện có của đường dẫn đến /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++thư mục để làm cho toàn bộ hoạt động không.

Dù sao, đây là những gì tôi nghĩ đang xảy ra và tôi tự hỏi liệu có ai biết cách khắc phục điều này đúng không?

Cảm ơn bạn!

PS cho bối cảnh:

$ 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

Sử dụng lệnh:

gcc -Wp,-v -E -

Trình tự tìm kiếm #include <...> của tôi:

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

Lý do lỗi #incoide được mô tả bên dưới:

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

Cách khắc phục:

    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

Tôi đã làm theo tùy chọn # 2 và xây dựng thành công ngay bây giờ!

Và cảm ơn solodon cho câu trả lời chi tiết. Tôi đã làm theo câu trả lời để khắc phục vấn đề.


Xin chào Niloy Datta! Tôi đề nghị bạn chỉnh sửa câu trả lời này để loại bỏ câu hỏi khỏi câu trả lời này và chỉ bao gồm những câu trả lời. Nếu bạn có một câu hỏi, sau đó hỏi riêng theo cách thích hợp nên đặt câu hỏi trong cộng đồng này.
Tiago Martins Peres

1
@TiagoMartinsPeres, đã xóa nó. Cảm ơn.
Niloy Datta

Cảm ơn người đàn ông, nó đã làm việc cho tôi. Bạn có biết một cách sạch hơn để đối phó với vấn đề này mặc dù?
Victor Sanchez

1

Có thể bản sao Xcode của bạn bị hỏng. Kiểm tra với Codeign:

codesign --verify /Applications/Xcode.app

Điều này đã xảy ra với tôi và vấn đề là Xcode bị hỏng. Cài đặt lại đã sửa nó.

Một cái gì đó đã sửa đổi như sau:

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 đã trống rỗng ở tất cả những nơi trên.


1

Phân tích của @ solodon là tại chỗ. Vấn đề có thể làcmath tệp bao gồm phiên bản sai math.hdựa trên thứ tự tìm kiếm của tệp tiêu đề. Ít nhất, đây là những gì đã xảy ra với tôi khi tôi gặp lỗi tương tự.

Quét đầu ra trình biên dịch của bạn cho #include <...> search starts here:. Bạn cũng có thể buộc đầu ra này từ dòng lệnh với (nguồn) :

gcc -Wp,-v -E -

Nó sẽ trông giống như thế này:

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

Lưu ý rằng các đường dẫn Toolchainsđến trước những đường dẫnPlatforms . Nếu trong trường hợp của bạn, thứ tự bị đảo ngược, bạn cần tìm ra cái gì trong cấu hình của bạn gây ra điều này. Đối với tôi, đó là một thiết lập rõ ràng CPLUS_INCLUDE_PATHtrong tập lệnh đăng nhập của tôi.

Mã vi phạm:

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

Đây là một phần trong nỗ lực của tôi để làm việc xung quanh Xcode 11 không còn cung cấp gói cài đặt cho các tệp tiêu đề SDK. Sau khi loại bỏ mã này, tôi đã có thể bao gồm thành côngcmath vào mã C ++ của mình.

Nếu bạn đến đây để tìm giải pháp cho vấn đề này, bạn có thể yêu cầu một giải pháp khác nhưng hy vọng điều này sẽ giúp làm sáng tỏ những gì dường như là nguyên nhân gốc rễ của vấn đề này, thứ tự đường dẫn tìm kiếm tệp tiêu đề.


0

Tôi thấy rằng trong dự án của tôi, tôi có tập tin math.h. Sau khi đổi tên, vấn đề đã biến mất. Đường may cmathbao gồm tập tin của tôi thay vì hệ thống.


0

Tôi vừa gặp lỗi này khi cố gắng biên dịch gRPC sau khi nâng cấp gần đây lên 10.15.4 và Xcode 11.4 và tôi bắt đầu xem xét tất cả các giải pháp được cung cấp (ở đây và Không thể biên dịch chương trình C trên máy Mac sau khi nâng cấp lên Catalina 10.15 ) , và đã thử một vài trong số chúng (mặc dù không cố gắng tạo lại /usr/includevì điều đó sẽ vi phạm sự tách biệt mà Apple đang cố gắng tạo ra) - dường như không có gì hoạt động.

Sau đó tôi đã xem xét kỹ các yêu cầu trình biên dịch thực tế mà makequy trình đang tạo ra và nhận thấy rằng có một sự rõ ràng

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

điều đó cuối cùng đã khiến việc bao gồm xảy ra theo thứ tự sai - loại bỏ đường dẫn bao gồm rõ ràng này cho phép quá trình biên dịch thành công với cài đặt mặc định của catalina, Xcode và các công cụ dòng lệnh Xcode, như bạn mong đợi, không có cờ thủ thuật / trình biên dịch nào khác cần thiết


Tôi cũng gặp phải vấn đề này. Nó chỉ ra rằng một số pkg-configtệp (ví dụ libcurl) từ Homebrew tự động thêm đường dẫn này, ngay cả khi bạn đã cài đặt Xcode. Điều này đã được sửa trong Homebrew 2.2.13. Thêm chi tiết trong github.com/Homebrew/brew/issues/5068 ; PR sửa lỗi này là trong github.com/Homebrew/brew/pull/7331 . TL; DR: Cập nhật homebrew
kkaefer

Vâng, đó là một pkg_config homebrew cũ cho zlib vẫn còn bằng cách nào đó nói dối, điều đó gây ra cho tôi - mặc dù đã có một homebrew cập nhật và hiện tại không cài đặt zlib
pahjbo

0

Bạn có thể thử sử dụng SDK CommandLineTools thay vì XCode.app SDK.

Tôi khắc phục sự cố này khi biên dịch PointCloudL Library (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

Ngoài ra, cài đặt lại XCode.app và CommandLineTools có thể giúp ích.


0

Tóm tắt: trong trường hợp của tôi, tập lệnh xây dựng đã sử dụng phiên bản cũ hơn của ios-cmake toolchain (2.1.2) và việc cập nhật nó lên 3.1.2 đã khắc phục sự cố bao gồm cmath / math.

Điều chỉnh lệnh tiện lợi được đề xuất bởi @Ryan H. gcc -Wp,-v -E -cho trường hợp của tôi (mục tiêu clang, c ++, iOs)

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

mang lại hai Catalina bao gồm một công cụ mới trong đó công cụ duy nhất từng được cài đặt là 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.

Vì vậy, đường dẫn bao gồm chính xác là đường dẫn không bị bỏ qua đầu tiên, mọi thứ sẽ hoạt động tốt, nhưng không được. Có vẻ như vấn đề xuất phát từ một lệnh bao gồm bổ sung được thêm vào lệnh gọi biên dịch bởi chuỗi công cụ 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
...

Thủ phạm là -Isystem ...đường dây, điều này sẽ khiến #include <math>dòng trong tệp cmath kết thúc tải tệp sai. Sau nhiều lần loay hoay tìm cách sửa các tập lệnh cmake, tôi nhận thấy phiên bản cũ hơn của ios-cmake và việc cập nhật nó có tác dụng 'duy nhất' là loại bỏ -Isystemdòng không mong muốn - mọi thứ khác gần như giống nhau (ngoài một vài tùy chọn trình biên dịch)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.