代码之家  ›  专栏  ›  技术社区  ›  Berlin Brown

关于GCC和ObjectiveC代码以及Cygwin的帮助

  •  5
  • Berlin Brown  · 技术社区  · 15 年前

    是否可以在cygwin下用GCC正确构建目标c代码。

    我有下面的应用程序应该可以在Mac环境下工作,但是无法获得使用gcc的最基本的东西。我需要更多的图书馆。

    #import "HelloWorldApp.h"
    
    int main(int argc, char *argv[]) {
        return 0;
    } // End of the // 
    
    @interface Car
    {
        int test;
    }
    
    //The registration is a read-only field, set by copy
    @property int (readonly, copy) test;
    
    //the driver is a weak reference (no retain), and can be modified
    //@property Person* (assign) driver;
    
    @end
    
    
    CC=gcc
    CXX=gcc-g++
    LD=$(CC)
    
    CFLAGS=
    
    LDFLAGS=-lobjc
    
    all: HelloWorld
    
    HelloWorld: HelloWorld.o
        $(LD) $(LDFLAGS) -o $@ $^
    
    %.o: %.m
        $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
    
    clean:
        rm -rvf *.o HelloWorld HelloWorld.exe
    

    错误:

    gcc -c HelloWorld.m -o HelloWorld.o
    In file included from HelloWorld.m:6:
    HelloWorldApp.h:19: error: stray '@' in program
    HelloWorldApp.h:19: error: parse error before "int"
    make: *** [HelloWorld.o] Error 1
    
    3 回复  |  直到 13 年前
        1
  •  2
  •   F'x    15 年前

    我认为这是因为您使用的是Objective-c2.0,这是苹果开发的一个私有扩展,他们没有对“标准”FSF GCC做出贡献。因此,您的mingw编译器(它不是基于Apple的,而是基于FSF的)不理解新的语法,比如属性。

        2
  •  2
  •   NewToObjC    15 年前

    @马拉色尔-你正中要害。我刚刚在一台PC上讨论过ObjC,遇到了一个确切的问题——我的路径指向一个v3.xgcc编译器。我换成了4.x版本,瞧!

    另外值得注意的是,如果将“implementation”拼写错误,也会弹出“stratey”@“错误,这有点误导。

    不管怎样,谢谢你的帮助。

        3
  •  -1
  •   Jesse Vogt    15 年前

    找到此引用:

    直接从 http://www.cs.indiana.edu/classes/c304/ObjCompile.html

    编制目标-C

    Objective-C代码可以使用gnuc编译器gcc进行编译。Objective-C接口文件通常以扩展名.h标记,如List.h中所示。实现文件通常以扩展名.m标记,如List.m中所示。实现文件应#导入其相应的接口文件。您的主程序还应该#导入它使用的所有类的接口文件。 通常,您需要编译单独实现类的文件。例如,要编译List.m,请使用以下命令:

    gcc -c -Wno-import List.m
    

    c开关告诉编译器生成一个对象文件List.o,该文件随后可以链接到您的程序中。对每个实现文件和主程序执行此操作。

    如果代码中有import语句,-Wno import开关告诉编译器不要发出警告。出于某种原因,GNU项目创始人richardstallman不喜欢import结构。

    gcc -o prog -Wno-import List.o main.o -lobjc
    

    -o prog告诉gcc创建一个名为prog的可执行程序(如果您不指定这个,它将默认为a.out)。

    请注意,在将Objective-C与gcc链接时,需要使用-lobjc开关指定Objective-C库。如果gcc报告错误,请与系统管理员联系,以确保在生成gcc时安装了Objective-C库和头文件(objc/Object.h)。