Как мне скомпилировать приложение GNUstep, которое использует NSApplication в Windows? - PullRequest
3 голосов
/ 16 сентября 2009

Я изучаю компиляцию приложения с помощью GNUstep в Windows. Это мой файл main.m:

#import <???/???.h>

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

Я понимаю, что это неполный фрагмент, если не сказать больше, и он, очевидно, ничего не сделает. Я пробовал несколько различных операторов импорта, в том числе Cocoa / Cocoa.h, GNUstepGUI / GMAppKit.h и т. Д. Но я всегда сталкиваюсь с ошибками при компиляции, которые, похоже, не могут найти помощь в Интернете.

Это моя команда компиляции, которую я запускаю из оболочки mingw:

gcc -o test main.m -I /GNUstep/System/Library/Headers/ \
    -L /GNUstep/System/Library/Libraries/ -lobjc -lgnustep-base \
    -fconstant-string-class=NSConstantString -enable-auto-import

Вот ошибки, которые я получаю:

c:/WINDOWS/TEMP/ccHxKZG2.o:main.m(.data+0x390): undefined reference to
  '___objc_class_name_NSApplication'
collect2:ld returned 1 exit status

Есть идеи о том, что мне нужно #import или что нужно исправить в моей команде компиляции?

Спасибо!

Ответы [ 3 ]

4 голосов
/ 16 сентября 2009

Благодаря Питеру Хоси я смог сам гуглить на страницу с ответом:

http://psurobotics.org/wiki/index.php?title=Objective-C

В отличие от разработки для OS X, вам нужен «make-файл»:

Поместите это в файл с именем "GNUmakefile" в том же каталоге, что и ваш источник:

include $(GNUSTEP_MAKEFILES)/common.make

APP_NAME = MyAppName
MyAppName_HEADERS =
MyAppName_OBJC_FILES = main.m
MyAppName_RESOURCE_FILES =

include $(GNUSTEP_MAKEFILES)/application.make

Затем выполните

make

На странице написано, что нужно выполнить

openapp ./MyAppName.app
, но файл .exe в папке .app, по-видимому, работает сам по себе.
3 голосов
/ 16 сентября 2009

Это ошибка компоновщика. #import - директива препроцессора; это не устранит ошибку при компоновке, и вы бы так и не добрались до компоновки, если бы у вас была ошибка препроцессора.

Вам необходимо установить связь с Foundation и AppKit (особенно последним, для NSApplication) или какими-либо эквивалентами GNUstep.

0 голосов
/ 25 июля 2018

Под Linux вы можете скомпилировать с помощью gcc:

gcc ``gnustep-config --objc-flags --gui-libs`` -o main main.m -L /usr/include/GNUstep/ -lobjc -lgnustep-base -lgnustep-gui

...