Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 关于GCC和ObjectiveC代码以及Cygwin的帮助_Objective C_Windows_Winapi_Gcc_Cygwin - Fatal编程技术网

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

Objective c 关于GCC和ObjectiveC代码以及Cygwin的帮助,objective-c,windows,winapi,gcc,cygwin,Objective C,Windows,Winapi,Gcc,Cygwin,是否有可能在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 fie

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

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

找到此引用:

直接取自

编译Objective-C

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

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

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

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

gcc -c -Wno-import List.m
gcc -o prog -Wno-import List.o main.o -lobjc
-o prog告诉gcc创建一个名为prog的可执行程序(如果您没有指定,它将默认为a.out)


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

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

@Malaxeur-你一针见血。我刚刚在电脑上用ObjC进行了一番尝试,遇到了一个确切的问题-我的路径指向一个v3.x gcc编译器。我切换到了4.x版本,瞧

还值得注意的是,如果拼写“implementation”错误,也会弹出“trassed”@“错误,这有点误导


无论如何,感谢您的帮助。

我想补充一点,您应该注意gcc版本。我必须运行gcc版本4(cygwin安装了3作为我的主要gcc版本)让objective c编译。我也用谷歌搜索了一下,这就是我的Makefile中的内容。但是,代码仍然没有编译。我猜是因为objective-c不是真正的objective。这里没有objective-c的标准。基本上有GNU的版本和Apple的版本(可能还有一些其他很少使用的版本)GNU的版本已经过时,消息来源充斥着“这是一个黑客”的评论。