На macOS Catalina с последним XCode УРОВЕНЬ __DARWIN_C_ слишком низок для строки.h … что мне делать?

#c #xcode #macos #macos-catalina #string.h

#c #xcode #macos #macos-catalina #string.h

Вопрос:

Я начинаю новую работу. Я парень из Windows, который десятилетиями работал в стеке Microsoft. Новая работа требует выполнения работы на Mac, и я буду работать с прямым кодом C. Это интересно, и я смутно помню, как использовал его в небольшом количестве в середине 90-х. Но я столкнулся с проблемой. Когда я пытаюсь скомпилировать код (команда «make» в инструменте командной строки), он выдает ошибку…

Кодовая база, которую я изучаю, пытается использовать *strdup(const char *__s1) функцию / метод, как определено в файле string.h include . Когда я смотрю на этот заголовок, я вижу, где он будет определен, но вокруг него есть препроцессорный if-блок, который выглядит так…

#if __DARWIN_C_LEVEL >= 200112L

Ищите эту переменную __DARWIN_C_LEVEL в Интернете… Я вижу, что люди спрашивают, что это такое, но я ничего не видел о том, что делать, если ваше значение слишком низкое. Я пытался найти способ изменить файл конфигурации или что-то еще на моем компьютере, чтобы значение было достаточно высоким, но я не могу его найти. Есть ли что-то, что мне нужно обновить, чтобы код делал то, что я хочу?

В качестве дополнительного примечания, единственный другой парень на работе, который делает что-либо в этой базе кода, работает на обычной машине Linux и редактирует код с помощью Vi. Он, очевидно, эксперт в базе кода и его среде, но не знает, как помочь с попыткой запустить это на macOS.

Любая помощь будет оценена.

Редактировать 9 ноября 2020

Я начинаю верить, что у меня на самом деле нет последней версии XCode, если это объясняет проблему. Я не получил ответа, но я прошу о помощи с этой частью здесь, на работе.

Я также пытаюсь предложить. Когда я пробую опцию для std= gnu11…

 make -std=gnu11
/Library/Developer/CommandLineTools/usr/bin/make: invalid option -- =
/Library/Developer/CommandLineTools/usr/bin/make: invalid option -- g
/Library/Developer/CommandLineTools/usr/bin/make: invalid option -- u
/Library/Developer/CommandLineTools/usr/bin/make: invalid option -- 1
/Library/Developer/CommandLineTools/usr/bin/make: invalid option -- 1
  

Если я удалю знак равенства, он, похоже, нравится лучше, но по-прежнему содержит ошибки…

 make -std gnu11
[...]
No implicit rule found for 'gnu11'.
 Finished prerequisites of target file 'gnu11'.
Must remake target 'gnu11'.
make: *** No rule to make target `gnu11'.  Stop.
  

Комментарии:

1. Это может помочь узнать, какой компилятор вы используете и какой диалект C. (-std= c11 или аналогичный)

2. Это предположение, но попробуйте добавить -std=gnu11 в свои параметры компиляции. Если это не сработает само по себе, попробуйте -D_DARWIN_C_SOURCE также добавить. Если какая-либо из этих работ скажет об этом, и я объясню.

3. Я расскажу, насколько я новичок в macOS… как мне проверить, какой диалект C я использую? И для предложения параметров команды … это будет сделано с помощью команды make?

4. @zwol, эти параметры команды не сработали. Ошибки вокруг недопустимых параметров.

5. Это странно. Какой компилятор вы используете?