无法在Windows上使用Gnustep编译Objective C.

时间:2009-05-25 04:18:07

标签: objective-c compilation gnustep

您好我是初学者学习目标c。 我发现错误“hello.m:1:34:Foundation / Foundation.h:没有这样的文件或目录” 我知道我需要制作一个make文件 我可以知道如何制作制作文件

4 个答案:

答案 0 :(得分:5)

无需创建makefile。如果您从“所有程序 - > GNUstep - > Shell”启动MinGW,如上面的Pax所示,您只需编译.m文件即可。

我的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!
      

答案 1 :(得分:3)

这个问题看起来好像你没有指示gcc在哪里找到相关的包含文件(即Foundation/Foundation.h所在的目录)。

您是从MinGW下运行gcc还是从命令提示符运行gcc。你应该在你的开始菜单上有一个“All Programs -> GNUstep -> Shell",它会打开这个shell。

这个的makefile应该简单如下:

include $(GNUSTEP_MAKEFILES)/common.make
TOOL_NAME = YourProg
YourProg_OBJC_FILES = source_code.m
include $(GNUSTEP_MAKEFILES)/tool.make

答案 2 :(得分:1)

如果您将源代码放入GNUStep的主目录中,则无需提供Foundation框架的相对位置。

答案 3 :(得分:0)

使用诸如paxdiablo指定的makefile之类的makefile可能是最简单的,因为您不是每次都想记住一个神秘的命令行,而是设置makefile然后从源文件夹中调用make。 但是,我在Windows下的经验表明,即使使用shell,GNUStep和Windows也不会使用它,因为它无法找到所需的所有make文件 - 添加一个环境变量GNUSTEP_MAKEFILES,其值为/ GNUstep / System / Library / Makefiles并重新启动那个shell,然后它无法找到标准makefile的任何错误都应该是历史记录。 (我曾尝试使用makefile的完整路径,但发现这包括特定的makefile,但在尝试包含更多的文件时失败了,因此转向简单的路径并添加环境变量。)