Не удается найти стандартные библиотеки при компиляции Objective-C с использованием GNUstep в Windows - PullRequest
11 голосов
/ 25 февраля 2009

Я только что установил 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?

Ответы [ 10 ]

10 голосов
/ 25 февраля 2009

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

7 голосов
/ 02 февраля 2012

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

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
4 голосов
/ 04 мая 2009

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

include ${GNUSTEP_MAKEFILES}/common.make

TOOL_NAME = MyApp
MyApp_OBJC_FILES = code.m

include ${GNUSTEP_MAKEFILES}/tool.make

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

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

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

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

Поздравляем, вы успешно написали свою первую программу на Objective C. Нужны какие-то разъяснения, пишите мне на: ayadav00009@gmail.com

1 голос
/ 23 февраля 2012

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

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

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

1 голос
/ 27 апреля 2011

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

-fconstant-string-class=NSConstantString

от Buggieboy выше ...

1 голос
/ 14 октября 2010

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

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

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

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

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

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

1 голос
/ 03 июня 2009

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

Я сделал это:

  1. Создайте 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.m -I / c / GNUstep / GNUstep / Система / Библиотека / Заголовки \

    -L / c / GNUstep / GNUstep / Система / Библиотека / Библиотеки -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!
1 голос
/ 25 февраля 2009

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

Я бился головой об этом с 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 сторону вещей.

...