ошибка: неизвестное имя типа '__darwin_wctype_t' typedef __darwin_wctype_t wctype_t при компиляции в MacOS с Clang - PullRequest
0 голосов
/ 01 мая 2020

Абсолютно новый проект - это нормально, но я нашел довольно старый проект с открытым исходным кодом и хочу его скомпилировать. В основном, ошибка появляется при включении заголовков, таких как iostream или algorythm.

Моя среда выглядит следующим образом:

  1. MacOS 10.15.4
  2. Clang 11.0.3
  3. Cmake 3.16.5
  4. Инструменты и заголовки установлены здесь /Library/Developer/CommandLineTools/usr/bin
  5. Проект использует cotire 1.8.0
  6. IDE - CLion

В общем, проект состоит из 30+ подпрограмм -проекты некоторые C некоторые C ++. Только те в C могут быть построены.

Я много чего пробовал: установка целевой версии для Cmake, установка путей, где искать заголовки вручную (в файлах Cmake). Переустановка инструментов разработчика также не помогает.

Пожалуйста, смотрите оригинальное сообщение об ошибке:

In file included from /Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/iostream:37:
In file included from /Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/ios:214:
In file included from /Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/iosfwd:95:
In file included from /Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/wchar.h:118:
In file included from /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include/wchar.h:92:
In file included from /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include/_wctype.h:42:
In file included from /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include/__wctype.h:62:
/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include/_types/_wctype_t.h:32:9: error: unknown type name '__darwin_wctype_t'
typedef __darwin_wctype_t wctype_t;

ОБНОВЛЕНИЕ 1 Я немного продвинулся вперед, и понял, что stdafx.h не может даже включать iostream. Поэтому я проверю все пути включения.

1 Ответ

0 голосов
/ 04 мая 2020

Возникла проблема с включениями. У проекта есть свой _types.h, и он есть в системе. Вариант проекта был включен первым, а системный был проигнорирован. Очевидно, что это приводит к таким крипт c сообщениям.

Это причина root. В документации Кланга говорится, что мне нужно использовать -isysroot для явной установки системных заголовков root, и это предотвратит совпадение проекта Сначала заголовок, но он не работает для меня. Временно я изменил имя заголовка проекта (types.h), и оно работало хорошо (без подчеркивания больше не считается системным заголовком), а пока постараюсь исправить это правильно.

...