【问题标题】:Help with GCC and ObjectiveC code and Cygwin帮助 GCC 和 ObjectiveC 代码和 Cygwin
【发布时间】:2009-09-23 15:25:25
【问题描述】:

是否可以在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

【问题讨论】:

    标签: objective-c windows winapi gcc cygwin


    【解决方案1】:

    我认为这是因为您使用的是 Objective-C 2.0,它是 Apple 开发的私有扩展,并且他们没有回馈“标准”FSF GCC。因此,您的 mingw 编译器(不是基于 Apple 的,而是基于 FSF 的)不理解新语法,如属性。

    【讨论】:

    • Objective-C 没有标准。基本上有 GNU 的版本和 Apple 的版本(也许还有一些其他很少使用的版本)。 GNU 的版本已经过时,源代码中充斥着“这是一个 hack”的 cmets。
    【解决方案2】:

    @ Malaxeur - 你一针见血。我刚刚在 PC 上对 ObjC 进行了抨击,并遇到了这个确切的问题——我的路径指向 v3.x gcc 编译器。我切换到 4.x 版本,瞧!

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

    无论如何,谢谢你的帮助。

    【讨论】:

      【解决方案3】:

      您是否尝试过直接从命令行而不是通过 makefile 运行 gcc 命令?

      找到这个参考:

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

      编译 Objective-C

      Objective-C 代码可以使用 GNU C 编译器 gcc 进行编译。 Objective-C 接口文件通常由扩展名 .h 标记,如 List.h 中。实现文件通常用扩展名 .m 来标记,就像在 List.m 中一样。实现文件应该#import其对应的接口文件。您的主程序还应该 #import 它使用的所有类的接口文件。 通常,您需要分别编译实现您的类的文件。例如,要编译 List.m,请使用以下命令:

      gcc -c -Wno-import List.m
      

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

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

      当您准备好编译您的程序时,您可以再次使用 gcc 链接您的类的所有实现。例如,要编译文件 List.o 和 main.o,您可以使用以下命令:

      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)。

      【讨论】:

      • 我想补充一点,你应该注意gcc版本。我必须运行 gcc 版本 4(cygwin 安装了 3 作为我的主要 gcc 版本)才能编译目标 c。
      • 我也用谷歌搜索过,这就是我的 Makefile 中的内容。但是,代码仍然无法编译。我猜是因为objective-c不是真正的objective.c
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-29
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-23
      相关资源
      最近更新 更多