Мне интересно: какой компилятор вы используете? Каково значение CMAKE_OSX_SYSROOT
?
Я вполне уверен, что это результат неправильного CMAKE_OSX_SYSROOT
. У меня была проблема, которую вы описываете при использовании привязок Python для Clang (где CMake не управляет вызовом компилятора), но мне удалось воссоздать ошибку в CMake, выполнив:
set(CMAKE_OSX_SYSROOT "") # Reset.
Я решилпроблема, следуя ответам на этот вопрос: Невозможно скомпилировать пакеты R с кодом c ++ после обновления до macOS Catalina .
Подводя итог: На Catalina /usr/include
очищается и защищается SIP. Таким образом, любой проект, который ожидает, что там будут найдены заголовки C, не будет компилироваться. Если я правильно помню, Apple рекомендует подавать отчеты об ошибках в проекты, которые ожидают заголовки 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)