11

我刚刚在我的 Windows XP 机器上安装了 GNUstep,我正在尝试从命令行编译以下 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 库的位置吗?

4

10 回答 10

10

看看这里。似乎需要一堆参数来编译命令。

于 2009-02-25T19:26:38.683 回答
7

尝试在您的命令中运行此命令行。它对我有用。

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
于 2012-02-02T13:59:42.240 回答
4

我刚刚制作了一个名为“GNUmakefile”的文件并将其放入其中:

include ${GNUSTEP_MAKEFILES}/common.make

TOOL_NAME = MyApp
MyApp_OBJC_FILES = code.m

include ${GNUSTEP_MAKEFILES}/tool.make

然后我继续在提示符下输入“make”。输出写入到 obj\MyApp.exe

那是为我做的。用 gcc 命令行拧馅。

于 2009-05-04T07:17:48.473 回答
2

Windows 的 GNUstep 安装过程

  1. 访问网址: 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. 现在你得到了 Windows 的 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 记住文件夹名称是您第一次启动 shell 时的名称,它会创建环境并在 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. 再次在 shell 中键入命令 ./hello.exe 最后,您将能够在 shell 中看到输出。

恭喜你成功编写了你的​​第一个 Objective C 程序。需要任何澄清给我写信:ayadav00009@gmail.com

于 2010-05-21T10:02:05.733 回答
1

您需要告诉编译器 GNUstep 头文件和框架的位置。最简单的方法(至少在 Unix 系统上,老实说我没有在 Windows 上使用过 GNUstep)是使用 gnustep-make。你可以有一个简单的 GNUstep-make 文件

include $(GNUSTEP_MAKEFILES)/common.make

TOOL_NAME = hello
hello_OBJC_FILES = hello.m

include $(GNUSTEP_MAKEFILES)/tool.make
于 2009-02-25T20:03:03.027 回答
1

我的 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. 在 shell 命令行上,切换到程序代码所在的目录。(请注意,由于这不是 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/系统/库/库 -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!
于 2009-06-03T19:32:25.220 回答
1

好的,我刚刚意识到整个 minw32、环境和 gnustep 核心开发的问题,以及为什么我的 make 文件无法在 Windows 环境中运行。因为我在安装软件包时没有使用该位置的默认选项。

根据默认选项,确保所有 3 个包都安装在文件夹结构中。我相信它始于 c:\GNUstep\

这解决了所有环境问题,例如:

Foundation/Foundation.h:没有这样的文件或目录

objc/Object.h:没有这样的文件或目录

希望能在那种糟糕的冗长情况下帮助其他人。

于 2010-10-14T15:52:12.847 回答
1

对于我的问题,决定性信息是

-fconstant-string-class=NSConstantString

从上面的buggieboy...

于 2011-04-27T16:25:34.417 回答
1

我知道这是一个迟到的回应,但以下网站非常适合让您开始使用 GNUstep,并回答了上述问题和许多其他问题:

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

它帮助了我很多。

于 2012-02-23T15:53:31.463 回答
0

我一直在用 Windows 下的 GNUStep 来解决这个问题。最简单的教程让你编写一个 C 程序并用 GCC 编译它——如果我想这样做,那么我就不会为 GNUStep 烦恼。下一个级别的教程做了一个 hello world,包括 Foundation 头文件和一个简单的 GNUmakefile 脚本,然后在 Windows 安装下它不起作用,因为您最终要遵循 GNUStep 说明。我知道打开它已安装的外壳,但是按照使用 GNUmakefile 文件的在线教程仍然无法正常工作。尝试包含通用 makefile 时,您会遇到一系列错误。

事实证明解决方案非常简单,只是没有告诉你这样做。安装程序尚未设置 GNUSTEP_MAKEFILES。如果您添加一个名为 GNUSTEP_MAKEFILES 的环境变量,其值为 /GNUstep/System/Library/Makefiles,然后重新打开 shell,则使用 GNUmakefile 脚本在源文件夹中运行 make 可以成功包含通用 makefile 等。

这足以让 makefile 构建一个包含 Foundation/Foundation.h 标头的简单控制台应用程序,这是个好兆头,尽管我必须进一步调查以查看是否还有其他尚未设置的设置会影响,比如说,GUI 方面的事情。

于 2010-04-29T00:22:40.247 回答