カタリナC ++:<cmath>ヘッダーを使用するとエラーが発生:グローバル名前空間に 'signbit'という名前のメンバーがない


16

MojaveからCatalinaにアップグレードした後、環境設定で/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdkをセットアップします。

<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

これはうまくいくはずです...


DOES xcode-select -pのXcodeが配置されている試合?using std::signbit;他の人と同様に、コードをに変更できますか?C ++ 11以降としてコンパイルしていますか?
エルジェイ

C ++ 11としてコンパイルしています。コードを変更することはできません。これは外部依存関係です。はいxcode-select -p、どこXCodeにあるかと一致します。
ローマSztergbaum

それは良いことではありません。コードが実行しようとしていますがusing ::signbit;、シンボルはグローバル名前空間にありませんstd::。名前空間にあります。私は他の人にも同じように推測します(私は彼らを追い詰めませんでした)。
Eljay

回答:


7

気になる:どのコンパイラを使用していますか?の価値はCMAKE_OSX_SYSROOT何ですか?

これは間違いの結果であると私はかなり確信していCMAKE_OSX_SYSROOTます。(CMakeがコンパイラー呼び出しを管理していない)clangのPythonバインディングを使用しているときにあなたが説明している問題がありましたが、次のようにしてCMakeでエラーを再現することができました:

set(CMAKE_OSX_SYSROOT "")  # Reset.

macOS Catalinaにアップデートした後、C ++コードでRパッケージをコンパイルできないという質問に答えて問題を解決しました。

要約する/usr/includeと、カタリナでは、SIPによってパージされ、保護されます。したがって、Cヘッダーがそこにあることを期待するプロジェクトは、コンパイルに失敗します。私の記憶が正しければ、AppleはのCヘッダーを期待するプロジェクトにバグレポートを提出することをお勧めします/usr/include

コンパイルしようとしているコードのビルドシステムを正しいヘッダーにポイントする必要があります。

(1)Xcodeが最新であることを確認します。Catalinaの古いXcodeがビルド環境にどのような影響を与えるかはわかりません。

(2)はの結果である-isysroot /sdk/pathコンパイラフラグを使用します。CMakeのベストプラクティスが何かはわかりませんが、やってみてください/sdk/pathxcrun --show-sdk-path

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のエコシステムに精通していなくても、適切な解決策を提案するために、この問題についてさらにいくつか考えます。元のコマンドラインは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
 ...

しかし、ここで興味深いのは、レポートする存在しないインクルードディレクトリと、最終的に検索するインクルードディレクトリとその順序です。私の推測では、コマンドラインで言及されていない追加のディレクトリは、Apple固有のロジックに基づいてApple Clangのドライバーによって挿入されます。

報告されたエラーから、<cmath>ヘッダーが次の場所にあることがわかります。その/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/cmath304行目で、次のことがわかります。

#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、同じフォルダのfromが最初に含まれ、次に#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が挿入された標準ライブラリディレクトリの上にあるmath.hことがわかります。これが、システム固有が見つかった理由であり、他の標準ライブラリヘッダーと同じフォルダーにあるディレクトリではありません。他の2つのディレクトリの前に標準ライブラリインクルードディレクトリをコマンドラインに明示的に追加すると-isystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1、問題がなくなり、ファイルをコンパイルできるので、これは可能性が高いです。これはClangのドライバーやその他の関連する処理が自動的に行うことではあり-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のオプションに従って、ビルドは成功しました!

そして、詳細な回答を提供してくれたsolodonに感謝します。私は問題を解決するために答えに従いました。


こんにちはNiloy Dattaです。この回答から質問を削除してこの回答を編集し、どの回答のみを含めることをお勧めします。質問がある場合は、このコミュニティで適切な方法で個別に質問してください。
Tiago Martins Peres李大仁

1
@TiagoMartinsPeres李大仁、それを削除しました。ありがとう。
Niloy Datta

おかげで、それは私のために働いた。この問題に対処するためのより明確な方法を知っていますか?
Victor Sanchez

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

@solodonの分析は的確です。問題は、cmathmath.hヘッダーファイルの検索順序に基づいファイルにの間違ったバージョンが含まれているます。少なくとも、これは同じエラーが発生したときに私に起こっていたものです。

コンパイラ出力をスキャンしてを探します#include <...> search starts here:(source)を使用して、コマンドラインからこの出力を強制することもできます。

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

最近10.15.4およびXcode 11.4にアップグレードした後でgRPCをコンパイルしようとすると、このエラーが発生し、提供されているすべてのソリューションを調べ始めました(ここでは、Catalina 10.15にアップグレードした後、MacでCプログラムをコンパイルできません)。 、それらのいくつかを試しました(ただし/usr/include、Appleが作成しようとした分離に違反するため、再作成を試みていません)-何も機能していないようです。

次に、makeプロセスが生成している実際のコンパイラの呼び出しを詳しく調べたところ、明示的な

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

これにより、最終的にインクルードが間違った順序で行われていました-この明示的なインクルードパスを削除すると、予想どおり、カタリナ、Xcode、およびXcodeコマンドラインツールのデフォルトのインストールでコンパイルが成功しました。他のトリック/コンパイラフラグはありません必要。


私もこの問題に遭遇しました。pkg-configXcodeがインストールされている場合でも、Homebrewの一部のファイル(libcurlなど)がこのパスを自動的に追加することがわかりました。これはHomebrew 2.2.13で修正されました。詳細については、github.com / Homebrew / brew / issues / 5068をご覧ください。これを修正するPRはgithub.com/Homebrew/brew/pull/7331にあります。TL; DR:アップデート自作
kkaefer

最新の自作までを有し、かつ、現在のzlibを持っていないにも関わらず、とにかくインストール-はい、それはまだ何とか私のためにこれを引き起こしていたこと、周りに横たわっていたことはzlibの古い自作のpkg_configだった
pahjbo

0

XCode.app SDKではなく、CommandLineTools 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ツールチェーン(2.1.2)を使用しており、それを3.1.2に更新するとcmath / math includeの問題が修正されました。

@Ryan Hによって提案された気の利いたコマンドgcc -Wp,-v -E -を私の場合に適応させる(clang、c ++、iOsターゲット)

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

これまでにインストールされたツールのみがXCode 11.14.1である未使用の1つを含む2つのCatalinaの利回り:

 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.

したがって、正しいインクルードパスは最初の無視されないパスです。すべてが正常に機能するはずですが、そうではありませんでした。この問題は、ios-cmakeツールチェーンによってコンパイル呼び出しに追加された追加のincludeコマンドに起因するようです。

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.