#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. Это странно. Какой компилятор вы используете?