Невозможно найти стандартные библиотеки при компиляции Objective-C с помощью GNUstep в Windows

Я только что установил GNUstep на свой компьютер с Windows XP и пытаюсь скомпилировать следующую программу Objective-C Hello World из командной строки:

#import <Foundation/Foundation.h>

int main(int argc, const char *argv[]) {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    NSLog(@"Hello world\n");

    [pool drain];
    return 0;
}

Когда я пытаюсь скомпилировать программу из командной строки вот так

gcc hello.m -o hello

Я получаю следующую ошибку

hello.m:1:34: Foundation/Foundation.h: No such file or directory

Мне нужно что-то сделать, чтобы сообщить компилятору, где расположены стандартные библиотеки Objective-C?


person Jason Roberts    schedule 25.02.2009    source источник
comment
Вы купили Программирование на Objective-C 2.0 Стивена Кочана, не так ли? Да, я столкнулся с той же проблемой. Автор утверждает, что он уделяет особое внимание тому, как заставить это работать в Windows, а затем НИКОГДА НЕ УПОМИНАЕТ ЭТО РАЗ!   -  person cmcculloh    schedule 08.06.2009


Ответы (10)


Взгляните на здесь. Похоже, для команды компиляции нужен набор параметров.

person epatel    schedule 25.02.2009
comment
Приведенная здесь ссылка содержит полезную информацию о том, как установить GNUstep в Windows и скомпилировать простую программу Objective-C. Ключевым моментом, который я делал неправильно, была попытка выполнить gcc и make из командной строки DOS, а не из оболочки MING, как требуется (Все программы- ›GNUstep-› Shell). - person Jason Roberts; 26.02.2009
comment
Я получил эту ошибку: ошибка: не удается найти объявление интерфейса для «NXConstantString». и решил это после добавления этого в компилятор: -fconstant-string-class = NSConstantString - person yehnan; 25.04.2009
comment
Приведенная ссылка возвращает мне страницу с ошибкой 404. - person Steven Craft; 11.11.2014
comment
@StevenCraft Попробуй, ссылка в веб-архиве сейчас :) - person epatel; 12.11.2014

попробуйте запустить эту командную строку в своей команде. у меня это сработало.

gcc -I"c:/GNUstep/GNUstep/System/Library/Headers" -L "c:/GNUstep/GNUstep/System/Library/Libraries" -o hello helloWorld.m -lobjc -lgnustep-base -fconstant-string-class=NSConstantString
person csk    schedule 02.02.2012

Я только что создал файл под названием "GNUmakefile" и вставил в него следующее:

include ${GNUSTEP_MAKEFILES}/common.make

TOOL_NAME = MyApp
MyApp_OBJC_FILES = code.m

include ${GNUSTEP_MAKEFILES}/tool.make

Затем я просто набрал "make" в командной строке. Вывод записывается в obj \ MyApp.exe.

Это сделало это для меня. начинка винта с командной строки gcc.

person Community    schedule 04.05.2009
comment
Я пробовал, но получаю ошибки: $ make -f Test1.make Это gnustep-make 2.2.0. Чтобы получить помощь, введите make print-gnustep-make-help. Делаем все для инструмента Test1 ... make [1]: GNUmakefile: Нет такого файла или каталога make [1]: *** Нет правила для создания целевого файла `GNUmakefile '. Останавливаться. make: *** [Test1.all.tool.variables] Ошибка 2 - person Sunit; 23.11.2009
comment
Чтобы использовать имя файла, отличное от GNUmakefile, вы должны предоставить аргументы -f и MAKEFILE_NAME. ›› make -f Prog1Makefile MAKEFILE_NAME = Prog1Makefile - person Wade; 30.03.2010

Процесс установки GNUstep для Windows

  1. Посетите URL-адрес: http://ftpmain.gnustep.org/pub/gnustep/binaries/windows/
  2. Загрузите exe-файл gnustep-system-0.19.2-setup.exe
  3. Затем загрузите gnustep-core-0.19.2-setup.exe. Помните одну вещь, если вы загружаете gnustep-system любой версии, вам необходимо загрузить ту же версию для gnustep-core. Например, если вы загрузили gnustep-setup-0.22.1-setup.exe, вам необходимо загрузить gustep-core-0.22.1-setup.exe, иначе ваш код не запустится.
  4. Сначала установите gnustep-system-0.19.2-setup.exe, затем установите gnustep-core-0.19.2setup.exe. Не пытайтесь установить в обратном порядке.
  5. Теперь у вас есть gnustep для Windows, затем перейдите в меню «Пуск»> «Все программы»> «GNUstep»> «оболочка».
  6. Теперь откройте редактор блокнота и напишите в блокноте следующий код:

.

#import 'Foundation/Foundation.h'

int main (int argc, const char * argv[])
{
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    NSLog (@"Anil Kumar Yadav has Run the First Objective C program!");
    [pool drain];

    return 0;
}

сохраните его как hello.m в вашем C: / GNUstep / home / foldername Помните, что имя папки - это имя, когда вы впервые запускаете оболочку, она создает envoirment и создает папку с именем вашего компьютера в C: / GNUstep / home папка. Так что не паникуйте.

  1. Перейдите в свою оболочку и введите следующую команду gcc -o hello hello.m -I / GNUstep / System / Library / Headers -L / GNUstep / System / Library / Libraries -lobjc -lgnustep-base -constant-string-class = NSConstantString
  2. Эта команда создаст файл hello.exe в папке с именем папки.
  3. Снова введите в оболочке команду ./hello.exe. Наконец, вы сможете увидеть вывод в оболочке.

Поздравляем, вы успешно написали свою первую программу на Objective C. Нужны пояснения, напишите мне: [email protected]

person Anil Kumar Yadav    schedule 21.05.2010
comment
Мне пришлось использовать двойные кавычки вокруг Foundation / Foundation.h, он жалуется на ожидание FILENAME, если используются одинарные кавычки - person bobtheowl2; 30.10.2012
comment
Это в конечном итоге позволило мне скомпилировать ... после изменения источника на #import <Foundation/Foundation.h> и изменения команды компиляции на -fconstant-string-class=NSConstantString. Надеюсь, это кому-то поможет! - person Alex Gray; 02.11.2012

Вам нужно сообщить компилятору, где расположены заголовки и фреймворки GNUstep. Самый простой способ (по крайней мере, в системах Unix, я буду честен и скажу, что я не использовал GNUstep в Windows) - использовать gnustep-make. У вас может быть файл GNUstep-make так же просто, как

include $(GNUSTEP_MAKEFILES)/common.make

TOOL_NAME = hello
hello_OBJC_FILES = hello.m

include $(GNUSTEP_MAKEFILES)/tool.make
person Community    schedule 25.02.2009
comment
Я наконец понял, что вы должны выполнять gcc и делать команды из оболочки MING, находящейся в разделе «Все программы» - ›GNUstep-› Shell, а не в командной строке DOS, как я пытался это сделать. - person Jason Roberts; 26.02.2009

Моя установка GNUstep находится в c: \ GNUstep \ GNUstep \ System. Если ваш другой, вам следует соответствующим образом изменить импорт Foundation.h.

Я сделал это:

  1. Создайте c: \ myprogs \ obj-c \ hello \ hello.m, который выглядит так:

// ---------- Привет.m

#import <../../GNUstep/System/Library/Headers/Foundation/Foundation.h>

int main(int argc, const char* argv[])
{
    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
    NSLog(@"Hello from Hello.m!");

    [pool release];
    return 0;
}

//----------

  1. Запустите оболочку MinGW. (См. Выше.)

  2. В командной строке оболочки перейдите в каталог, в котором находится программный код. (Обратите внимание, что, поскольку это не Unix, необходимо указать букву диска Windows.):

    cd / c / myprogs / obj-c / привет

  3. Скомпилируйте программу:

    gcc -o привет привет. m -I / c / GNUstep / GNUstep / System / Library / Headers \

    -L / c / GNUstep / GNUstep / System / Library / Libraries -lobjc -lgnustep-base \

    -fconstant-string-class = NSConstantString

(Обратите внимание, что символ «\» позволяет нам расширить команду до нескольких строк.)

При компиляции я получаю следующие информационные сообщения:

Info: resolving ___objc_class_name_NSAutoreleasePool by linking to __imp____objc_class_name_NSAutoreleasePool (auto-import)
Info: resolving ___objc_class_name_NSConstantString by linking to __imp____objc_class_name_NSConstantString (auto-import)

Запуск полученного hello.exe дает мне следующее:

2009-06-03 14:44:59.483 hello[1240] Hello from Hello.m!
person Buggieboy    schedule 03.06.2009

Хорошо, я только что осознал проблему со всем этим minw32, средой и gnustep core dev и почему мой make-файл не работал в среде Windows. Потому что я не использовал параметры по умолчанию для местоположения при установке пакетов.

Убедитесь, что все 3 пакета установлены друг над другом в структуре папок в соответствии с параметрами по умолчанию. и я считаю, что он начинается в c: \ GNUstep \

Это решило все проблемы с окружающей средой, такие как:

Foundation / Foundation.h: нет такого файла или каталога

objc / Object.h: нет такого файла или каталога

Надеюсь, что поможет кому-нибудь еще в этой дурацкой многословной ситуации.

person Nosy Rat    schedule 14.10.2010

Для моей проблемы решающей информацией было

-fconstant-string-class=NSConstantString

от buggieboy выше ...

person Richard    schedule 27.04.2011

Я знаю, что это запоздалый ответ, но следующий веб-сайт отлично подходит для того, чтобы помочь вам начать работу с GNUstep, с ответами на вышеупомянутые и многие другие вопросы:

http://www.gnustep.it/nicola/Tutorials/index.html

Это мне очень помогло.

person RobC    schedule 23.02.2012

Я бился головой об этом с помощью GNUStep под Windows. В простейших руководствах вы можете написать программу на C и скомпилировать ее с помощью GCC - если бы я хотел это сделать, я бы не возился с GNUStep. Следующий уровень руководств представляет собой приветственный мир, включая заголовок Foundation и простой сценарий GNUmakefile, который затем не работает при установке Windows, поскольку вы в конечном итоге следуете инструкциям GNUStep. Я знаю, что нужно открыть оболочку, в которой она установлена, но следование онлайн-руководствам по использованию файла GNUmakefile по-прежнему не помогло. Вы получили целую серию ошибок из-за попытки включить общий make-файл.

Оказывается, решение довольно простое, вам просто не говорят, что это нужно делать. Установщик не установил GNUSTEP_MAKEFILES. Если вы добавите переменную среды GNUSTEP_MAKEFILES со значением / GNUstep / System / Library / Makefiles, а затем повторно откроете оболочку, то запуск make в исходной папке с помощью сценария GNUmakefile может успешно включить общий make-файл и так далее.

Затем этого достаточно, чтобы создать из make-файла простое консольное приложение с включенным заголовком Foundation / Foundation.h, что предвещает хорошее, хотя мне придется дополнительно исследовать, есть ли еще какие-либо параметры, которые не были установлены, которые влияют на , скажем, со стороны GUI.

person David Burton    schedule 29.04.2010