Невозможно найти стандартные библиотеки при компиляции 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?

Ответ 1

Посмотрите здесь. Кажется, вам нужна команда параметров компиляции.

Ответ 2

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

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

Ответ 3

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

include ${GNUSTEP_MAKEFILES}/common.make

TOOL_NAME = MyApp
MyApp_OBJC_FILES = code.m

include ${GNUSTEP_MAKEFILES}/tool.make

тогда я только что набрал "make" в приглашении. Вывод записывается в obj\MyApp.exe

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

Ответ 4

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

  • Посетите URL-адрес: http://ftpmain.gnustep.org/pub/gnustep/binaries/windows/
  • Загрузите файл exe gnustep-system-0.19.2-setup.exe
  • Затем загрузите gnustep-core-0.19.2-setup.exe Помните одно, если вы загружаете gnustep-систему любой версии, которую вы должны загрузить, чтобы загрузить ту же версию для gnustep-core. Например, если вы загрузили gnustep-setup-0.22.1-setup.exe, вам необходимо загрузить gustep-core-0.22.1-setup.exe, иначе ваш код не будет запущен.
  • Сначала установите gnustep-system-0.19.2-setup.exe, затем установите gnustep-core-0.19.2setup.exe. Не пытайтесь установить в обратном порядке.
  • Теперь у вас есть gnustep для окон, затем перейдите к start > all program > GNUstep > shell
  • Теперь откройте редактор блокнота и напишите в блокноте следующий код:

.

#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 Помните имя папки - это имя, когда вы впервые запустили оболочку, создав ее, и создайте папку по имени вашего компьютера в папке C:/GNUstep/home. Так что не будьте panic.Okay

  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]

Ответ 5

Вам нужно сообщить компилятору, где расположены заголовки и рамки 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

Ответ 6

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

Я сделал это:

  • Создайте c:\myprogs\obj-c\hello\hello.m, который выглядит следующим образом:

//---------- Hello.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/hello

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

    gcc -o hello hello.m -I/c/GNUstep/GNUstep/System/Library/Headers\

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

    -fconstant-строка-класс = 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!

Ответ 7

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

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

Это позволило решить все проблемы среды, такие как:

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

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

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

Ответ 8

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

-fconstant-string-class=NSConstantString

от buggieboy выше...

Ответ 9

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

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

Это помогло мне тонну.

Ответ 10

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

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

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