Catalina C ++: Menggunakan kesalahan header <cmath> menghasilkan: tidak ada anggota bernama 'signbit' di namespace global

16

Setelah memutakhirkan ke Catalina dari Mojave, Pengaturan: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk di env.

Saya tidak dapat mengkompilasi program yang digunakan <cmath> header.

Saya mencoba mengubah CFLAGS, CCFLAGS, CXXFLAGS untuk menunjuk ke Lokasi MacOSSDK yang tidak mengubah apa pun

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;

misalnya makro: islesshadir di namespace global dan di komputer saya:

 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

Bahkan header cmath memasukkannya:

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

Dan baris perintah saya memiliki opsi -isystem /usr/local/include

Ini seharusnya bekerja ...

roman Sztergbaum
sumber
Apakah xcode-select -pcocok dengan tempat Xcode berada? Bisakah Anda mengubah kode untuk using std::signbit;, juga untuk yang lain? Apakah Anda mengkompilasi sebagai C ++ 11 atau lebih baru?
Eljay
Kompilasi sebagai C ++ 11. Saya tidak dapat mengubah kode, ini merupakan dependensi eksternal! ya xcode-select -pcocok di mana XCodeberada.
roman Sztergbaum
Itu tidak baik. Kode itu coba lakukan using ::signbit;dan simbolnya tidak ada di namespace global, itu di std::namespace. Saya kira juga dengan yang lain (saya tidak mengejar mereka).
Eljay

Jawaban:

7

Saya ingin tahu: Kompiler apa yang Anda gunakan? Apa nilainya CMAKE_OSX_SYSROOT?

Saya cukup yakin ini adalah hasil kesalahan CMAKE_OSX_SYSROOT. Saya punya masalah yang Anda gambarkan ketika menggunakan binding python untuk dentang (di mana CMake tidak mengelola panggilan kompiler), tapi saya berhasil membuat kesalahan di CMake dengan melakukan:

set(CMAKE_OSX_SYSROOT "")  # Reset.

Saya memecahkan masalah saya dengan mengikuti jawaban untuk pertanyaan ini: Tidak dapat mengkompilasi paket R dengan kode c ++ setelah memperbarui ke macOS Catalina .

Untuk meringkas: Pada Catalina, /usr/includedibersihkan dan dilindungi oleh SIP. Dengan demikian, setiap proyek yang mengharapkan header C ditemukan di sana akan gagal dikompilasi. Jika saya ingat dengan benar, Apple merekomendasikan untuk mengajukan laporan bug ke proyek yang mengharapkan header C masuk /usr/include.

Anda harus mengarahkan sistem pembuatan kode yang Anda coba kompilasi ke header yang tepat:

(1) Pastikan Xcode terbaru. Tidak ada yang tahu apa yang mungkin dilakukan Xcode Catalina pada lingkungan build Anda.

(2) Gunakan -isysroot /sdk/pathflag compiler, di mana /sdk/pathhasilnya xcrun --show-sdk-path. Saya tidak yakin apa praktik terbaik CMake, tapi coba lakukan

set(CMAKE_OSX_SYSROOT /sdk/path)

atau

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

Jika itu menyelesaikan masalah, Anda mungkin ingin mencari cara yang lebih baik untuk melakukan ini di CMake.

Tentu saja, jika Anda berjiwa petualang, Anda juga dapat menonaktifkan SIP, seperti yang disarankan dalam jawaban untuk pertanyaan saya: / usr / sertakan hilang pada macOS Catalina (dengan Xcode 11)

mkl
sumber
1
set(CMAKE_OSX_SYSROOT ...)masuk ke CMakeLists.txt, bukan shell.
mkl
6

Saya mengalami masalah yang sama ketika mencoba menargetkan iOS (baik di MacBook Air dan di runner GitHub Actions) dan berikut adalah beberapa pemikiran tentang masalah ini meskipun saya tidak cukup akrab dengan ekosistem Apple untuk menyarankan solusi yang tepat. Baris perintah asli berasal dari CMake di cpprestsdk, tapi begitu saya merebusnya menjadi esensi, di sini ada repro pendek.

  1. Buat file cmath-bug.cppdengan satu-satunya baris di dalamnya:
    #include <cmath>
  1. Jalankan (baris baru di depan beberapa argumen adalah untuk kenyamanan membaca, menghapusnya)
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

Ketika saya menjalankannya, saya menjadi familiar bagi banyak orang yang menghadapi masalah yang sama:

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

Hanya 2 direktori yang saya berikan pada baris perintah asli saya yang ada dan adalah:

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

Tetapi bit yang menarik di sini adalah direktori yang tidak ada termasuk yang dilaporkan serta direktori include yang akhirnya dicari dan urutannya. Dugaan saya adalah bahwa direktori tambahan yang tidak disebutkan pada baris perintah dimasukkan oleh driver Apple Clang berdasarkan pada beberapa logika khusus Apple.

Anda dapat melihat dari kesalahan yang dilaporkan bahwa <cmath>tajuk ditemukan di: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/cmathdan pada baris 304 Anda dapat melihat:

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

Dilihat dari fakta bahwa dalam folder yang sama /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/ada file math.hyang memberikan definisi yang diperlukan, misalnya:

#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

penulis <cmath>mengharapkan math.hdari folder yang sama dimasukkan terlebih dahulu dan kemudian #include_next <math.h>direktif menemukan sistem-spesifik math.h. Namun bukan itu yang terjadi dalam kenyataan.

Jika Anda melihat 2 entri pertama di direktori yang dicari:

#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

Anda melihat bahwa direktori menyertakan khusus sistem akhirnya berada di atas direktori perpustakaan standar Dentang-disuntikkan, itulah sebabnya mengapa sistem khusus math.hditemukan, bukan yang ada di folder yang sama dengan sisa header perpustakaan standar. Ini mungkin terjadi karena jika saya secara eksplisit menambahkan perpustakaan standar termasuk direktori ke baris perintah saya SEBELUM dua direktori lain -isystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1masalah hilang dan saya dapat mengkompilasi file. Bukan itu yang dilakukan oleh driver Clang atau apa pun yang terlibat di sini secara otomatis: ia menambah direktori library standar via -internal-system(tidak yakin apa arti semantik dari flag internal itu) dan menambahkannya SETELAH direktori sistem.

Sekarang jika Anda melihat daftar direktori yang diabaikan, entri pertama dalam daftar itu adalah:

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

di mana bagian trailing c++/v1tidak ada di mesin saya, membuat saya bertanya-tanya apakah instalasi iPhone SDK seharusnya membuat tautan simbolis c++di dalam bagian jalur yang ada untuk menunjuk ke /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++direktori untuk membuat semuanya berfungsi.

Ngomong-ngomong, ini yang kupikir sedang terjadi dan aku bertanya-tanya apakah ada yang tahu bagaimana cara memperbaikinya dengan benar?

Terima kasih!

PS Untuk konteksnya:

$ 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
solodon
sumber
2

Menggunakan perintah:

gcc -Wp,-v -E -

urutan pencarian #include <...> saya:

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

Alasan #include error dijelaskan di bawah ini:

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

Cara mengatasinya:

    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

Saya telah mengikuti opsi # 2 dan build berhasil sekarang!

Dan terima kasih kepada solodon untuk jawaban terperinci. Saya mengikuti jawaban untuk memperbaiki masalah ini.

Niloy Datta
sumber
Hai Niloy Datta! Saya sarankan Anda untuk mengedit jawaban ini menghapus pertanyaan dari jawaban ini dan hanya menyertakan jawaban apa. Jika Anda memiliki pertanyaan, maka tanyakan secara terpisah dengan cara yang tepat pertanyaan harus ditanyakan dalam komunitas ini.
Tiago Martins Peres 李大仁
1
@TiagoMartinsPeres 李大仁, menghapusnya. Terima kasih.
Niloy Datta
Terima kasih kawan, itu berhasil untuk saya. Apakah Anda tahu cara yang lebih bersih untuk mengatasi masalah ini?
Victor Sanchez
1

Mungkin saja salinan Xcode Anda rusak. Periksa dengan codesign:

codesign --verify /Applications/Xcode.app

Ini terjadi pada saya, dan masalahnya Xcode rusak. Menginstal ulang memperbaikinya.

Sesuatu telah mengubah yang berikut:

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 kosong di semua tempat di atas.

Rob Napier
sumber
1

Analisis @ solodon tepat. Masalahnya adalah kemungkinan bahwa cmathfile tersebut termasuk versi yang salah math.hberdasarkan urutan pencarian file header. Setidaknya, inilah yang terjadi pada saya ketika saya mendapatkan kesalahan yang sama.

Pindai output kompiler Anda #include <...> search starts here:. Anda juga dapat memaksa output ini dari baris perintah dengan (sumber) :

gcc -Wp,-v -E -

Seharusnya terlihat seperti ini:

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

Perhatikan bahwa jalan dengan Toolchainsdatang sebelum mereka dengan Platforms. Jika dalam kasus Anda urutannya terbalik, Anda perlu mencari tahu apa yang menyebabkan konfigurasi ini. Bagi saya, itu adalah pengaturan eksplisit CPLUS_INCLUDE_PATHdalam skrip login saya.

Kode yang menyinggung:

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

Ini adalah bagian dari upaya saya untuk bekerja di sekitar Xcode 11 tidak lagi menyediakan paket instalasi untuk file header SDK. Setelah menghapus kode ini, saya berhasil memasukkan cmathdalam kode C ++ saya.

Jika Anda datang ke sini mencari solusi untuk masalah ini, Anda mungkin memerlukan solusi yang berbeda tetapi mudah-mudahan ini membantu menjelaskan apa yang tampaknya menjadi penyebab utama masalah ini, urutan jalur pencarian file header.

Ryan H.
sumber
0

Saya menemukan bahwa di dalam proyek saya, saya punya file math.h. Setelah mengganti nama, masalahnya hilang. Jahitan cmathtermasuk file saya, bukan sistem.

Gralex
sumber
0

Saya baru saja mendapatkan kesalahan ini ketika mencoba mengkompilasi gRPC setelah baru-baru ini melakukan upgrade ke 10.15.4 dan Xcode 11.4 dan saya mulai melihat semua solusi yang ditawarkan (di sini dan Tidak dapat mengkompilasi program C pada Mac setelah memutakhirkan ke Catalina 10.15 ) , dan mencoba beberapa dari mereka (meskipun tidak mencoba untuk menciptakan kembali /usr/includekarena itu akan melanggar pemisahan yang coba dibuat oleh Apple) - sepertinya tidak ada yang berhasil.

Saya kemudian melihat lebih dekat pada permintaan kompos yang sebenarnya yang makedihasilkan oleh proses dan memperhatikan bahwa ada yang eksplisit

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

yang pada akhirnya menyebabkan menyertakan terjadi dalam urutan yang salah - menghapus jalur menyertakan eksplisit ini memungkinkan kompilasi untuk berhasil dengan instalasi default catalina, Xcode dan alat-alat baris perintah Xcode, seperti yang Anda harapkan, tidak ada trik lain / flag penyusun dibutuhkan.

pahjbo
sumber
Saya mengalami masalah ini juga. Ternyata beberapa pkg-configfile (misalnya libcurl) dari Homebrew menambahkan jalur ini secara otomatis, bahkan jika Anda memiliki Xcode diinstal. Ini diperbaiki di Homebrew 2.2.13. Lebih detail di github.com/Homebrew/brew/issues/5068 ; PR yang memperbaikinya ada di github.com/Homebrew/brew/pull/7331 . TL; DR: Perbarui homebrew
kkaefer
Ya itu adalah pkg_config homebrew lama untuk zlib yang entah bagaimana masih tergeletak di sekitar, yang menyebabkan ini bagi saya - meskipun memiliki homebrew yang up to date dan saat ini tidak memiliki zlib yang diinstal tetap
pahjbo
0

Anda dapat mencoba menggunakan CommandLineTools SDK daripada XCode.app SDK.

Saya memperbaiki masalah ini ketika saya mengkompilasi 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

Juga, instal ulang XCode.app dan CommandLineTools dapat membantu.

Lester Lo
sumber
0

Ringkasan: dalam kasus saya, skrip build menggunakan versi yang lebih lama dari ios-cmake toolchain yang (2.1.2), dan memutakhirkannya ke 3.1.2 memperbaiki masalah menyertakan cmath / matematika.

Menyesuaikan perintah bagus yang diusulkan oleh @Ryan H. gcc -Wp,-v -E -untuk kasus saya (dentang, c ++, target iOs)

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

hasil pada dua Catalina termasuk satu perawan di mana hanya alat yang pernah diinstal adalah 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.

Jadi jalur sertakan yang benar adalah yang pertama yang tidak diabaikan, semuanya harus bekerja dengan baik, tetapi tidak. Tampaknya masalah berasal dari perintah tambahan yang ditambahkan ke panggilan kompilasi oleh toolchain ios-cmake:

CompileC /Users/<...>/build.Release.ios/<...>.o <...>.cpp normal arm64 c++ com.apple.compilers.llvm.clang.1_0.compiler
-Isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.4.sdk <...>
 -I/Users/<...>/Build_iOS/build.Release.ios/build.arm/Binaries/Release/include
 -Isystem /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.4.sdk/usr/include
 -I/Users/<...>/Build_iOS/build.Release.ios/build.arm/src/<...>.build/Release-iphoneos/<...>/DerivedSources/arm64
...

Pelakunya adalah -Isystem ...baris, yang akan menyebabkan #include <math>baris dalam file cmath berakhir dengan memuat file yang salah. Setelah banyak mengutak-atik mencoba untuk memperbaiki skrip cmake, saya perhatikan versi lama dari ios-cmake, dan memutakhirkannya memiliki efek 'satu-satunya' untuk menghapus -Isystembaris yang tidak diinginkan - semuanya hampir sama (terlepas dari beberapa opsi kompiler)

Spikegee
sumber