Как решить ошибку: отсутствует бинарный оператор перед токеном "(" на mac? - PullRequest
1 голос
/ 08 апреля 2019

Я сейчас пытаюсь установить PySift внутри virtualenv на Mac.Однако библиотека Zstandard приводит к ошибке при установке.

In file included from /usr/include/Availability.h:236:0,
                     from /usr/include/stdlib.h:61,
                     from zstd/lib/compress/fse_compress.c:38:
    /usr/include/AvailabilityInternal.h:33:18: error: missing binary operator before token "("
     #if __has_include(<AvailabilityInternalPrivate.h>)
                      ^
    In file included from /usr/include/stdlib.h:61:0,
                     from zstd/lib/compress/fse_compress.c:38:
    /usr/include/Availability.h:497:18: error: missing binary operator before token "("
     #if __has_include(<AvailabilityProhibitedInternal.h>)
                      ^
    error: command 'gcc' failed with exit status 1

Большинство решений, которые я видел в StackOverflow, обычно предлагают запустить xcode-select --install, но это не сработало.В качестве альтернативы этот пост предлагает использовать следующую команду

open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

Команда откроет окно, в котором можно установить отсутствующий MacOS SDK.Тем не менее, это все еще не сработало.После этого я понял, что я не обновил Xcode до последней версии.Но даже после обновления ошибка все равно появляется.Наконец, я попытался использовать brew, как в этом посте , и выполнить какое-то обновление на случай, если было обнаружено какое-то поврежденное программное обеспечение, которое мешало завершить установку.

В конце концов, он все еще работал НЕ .Интересно, кто-нибудь может мне указать, что я пропустил, что вызвало ошибку?Большое спасибо

Редактировать:

Я проверил этот пост и не нашел ответа, потому что я специально пытался выяснить, почему __has_include до этого( привело к ошибке.

1 Ответ

1 голос
/ 08 апреля 2019

Вы получаете синтаксическую ошибку от препроцессора, т.к. он не распознает __has_include как допустимый функционально-подобный макрос. Это потому, что это специальная директива c ++ 17.

Вы можете обойти это, просто удалив эту строку (и соответствующий #endif) из файла. Если вы получили сообщение об ошибке компилятора об отсутствующем include, тоже удалите строку #include.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...