在Windows上使用GNUstep编译Objective-C时无法找到标准库

时间:2009-02-25 19:20:19

标签: objective-c windows gnustep

我刚刚在我的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库的位置?

10 个答案:

答案 0 :(得分:10)

看看here。看起来编译命令需要一堆参数。

答案 1 :(得分: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

答案 2 :(得分: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命令行搞砸。

答案 3 :(得分:2)

GNUstep Windows安装流程

  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系统,你必须为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然后去了 开始&gt;所有程序&gt; GNUstep的&GT;外壳
  6. 现在打开记事本编辑器,在记事本中写下以下代码:
  7. #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;
    }
    

    将其保存为C:/ GNUstep / home / foldername中的hello.m. 记住foldername是第一次启动shell时它的名称,它创建了一个文件,并在C:/ GNUstep / home文件夹中按计算机名称的名称创建一个文件夹。所以不要惊慌。好吧

    1. 转到shell并键入以下命令 gcc -o hello hello.m -I / GNUstep / System / Library / Headers -L / GNUstep / System / Library / Libraries -lobjc -lgnustep-base -constant-string-class = NSConstantString
    2. 此命令将在foldername文件夹中创建一个hello.exe文件。
    3. 再次在shell中键入命令 ./hello.exe 最后,您将能够看到shell中的输出。
    4. 祝贺您成功编写了第一个Objective C程序。 需要任何澄清请写信给我:ayadav00009@gmail.com

答案 4 :(得分: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

答案 5 :(得分:1)

我的GNUstep安装位于c:\ GNUstep \ GNUstep \ System中。如果您的不同,则应相应地更改Foundation.h的导入。

我这样做了:

  1. 创建如下所示的c:\ myprogs \ _ obj -c \ hello \ hello.m:
  2. // ---------- 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 shell。 (见上文。)

    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 / System / Library / Libraries -lobjc -lgnustep-base \

      -fconstant字符串类= NSConstantString

    4. (注意“\”字符允许我们将命令扩展到多行。)

      编译时收到以下信息性消息:

      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!
      

答案 6 :(得分:1)

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

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

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

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

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

希望如果能帮助其他任何人在这种疯狂的情况下啰嗦。

答案 7 :(得分:1)

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

-fconstant-string-class=NSConstantString

来自上面的buggieboy ......

答案 8 :(得分:1)

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

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

这对我有所帮助。

答案 9 :(得分:0)

我一直在用Windows下的GNUStep对付这个问题。最简单的教程让你编写一个C程序并用GCC编译它 - 如果我想这样做那么我就不会为GNUStep而烦恼。下一级教程会执行一个hello world,包括Foundation标头和一个简单的GNUmakefile脚本,然后在Windows安装下无法运行,因为您最终会遵循GNUStep指令。我知道打开它安装的shell,但是使用GNUmakefile文件的在线教程仍然无法正常工作。尝试包含常见的makefile时,你遇到了一系列错误。

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

这足以让makefile构建一个简单的控制台应用程序,其中包含Foundation / Foundation.h标头,这预示着很好,虽然我将不得不进一步调查以确定是否还有其他设置尚未设置设置哪些影响,比如GUI的一面。