3

我正在探索在 Windows 上使用 GNUstep 编译应用程序。这是我的 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 shell 运行的编译命令:

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

这些是我得到的错误:

c:/WINDOWS/TEMP/ccHxKZG2.o:main.m(.data+0x390): 未定义引用
  '___objc_class_name_NSApplication'
collect2:ld 返回 1 个退出状态

关于我需要#import 或在编译命令中需要修复什么的任何想法?

谢谢!

4

3 回答 3

4

感谢彼得·霍西(Peter Hosey),我能够自己用谷歌搜索到该页面的答案:

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

与 OS X 开发不同,您需要一个“makefile”:

将其放入与源代码相同的目录中名为“GNUmakefile”的文件中:

包括 $(GNUSTEP_MAKEFILES)/common.make

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

包括 $(GNUSTEP_MAKEFILES)/application.make

然后执行

制作

页面说要执行

打开应用程序 ./MyAppName.app
但是 .app 文件夹中的 .exe 文件似乎是自行运行的。

于 2009-09-15T23:04:40.147 回答
3

那是链接器错误。#import是一个预处理器指令;它不会解决链接中的错误,无论如何,如果你有一个预处理器错误,你就不会得到链接。

您需要链接 Foundation 和 AppKit(尤其是后者,对于 NSApplication),或任何 GNUstep 的等价物。

于 2009-09-15T21:17:40.643 回答
0

在 Linux 下,您可以使用 gcc 进行编译:

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

于 2018-07-25T16:39:45.173 回答