2014-03-13 77 views
0

我正在编译我的第一个Objective-C程序。这只是简单的“编程很有趣!”代码:编译Objective-C程序时出错

#import <Foundation/Foundation.h> 
int main (int argc, const char * argv[]) 
{ 
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];  
    NSLog (@"Programming is fun!"); 
    [pool drain];  
    return 0; 
} 

我下载了GNUstep的,MSYS系统-0.30.0-setup.exe并GNUstep的核心-0.34.0-setup.exe并按照这个顺序安装它们。我将名为prg1.m(包含前面的代码)的文件复制到/GNUstep/msys/1.0/home/username文件夹中。我打开GNUstep的外壳,并着手发出以下命令:

gcc -o prg1 prg1.m -I /GNUstep/System/Library/Headers -L /GNUstep/System/Library/Libraries -lobjc -lgnustep-base -fconstant-string-class=NSConstantString 

我得到以下输出:

In file included from C:/GNUstep/GNUstep/System/Library/Headers/GNUstepBase/GSCo 
nfig.h:281:0, 
       from C:/GNUstep/GNUstep/System/Library/Headers/GNUstepBase/GSVe 
rsionMacros.h:219, 
       from C:/GNUstep/GNUstep/System/Library/Headers/Foundation/Found 
ation.h:30, 
       from prg1.m:1: 
c:\mingw\include\w32api.h:27:2: warning: #warning WARNING - The w32api.h header 
file is deprecated and will be removed. [-Wcpp] 
#warning WARNING - The w32api.h header file is deprecated and will be removed. 
^
In file included from C:/GNUstep/GNUstep/System/Library/Headers/Foundation/NSPor 
tMessage.h:30:0, 
       from C:/GNUstep/GNUstep/System/Library/Headers/Foundation/Found 
ation.h:99, 
       from prg1.m:1: 
C:/GNUstep/GNUstep/System/Library/Headers/Foundation/NSPort.h:210:3: error: unkn 
own type name 'WSAEVENT' 
    WSAEVENT    eventListener; 
^

任何人都知道为什么,我在最后得到这个错误?我一直在Google上搜索几个小时,但没有多少运气。任何帮助将不胜感激。提前致谢。

+0

您是否曾经安装过MinGW?我刚刚安装了GNUstep MSYS System 0.30.0,GNUstep Core 0.34.0和GNUstep Devel 1.4.0,我无法重现你的问题。此行'c:\ mingw \ include \ w32api.h'不对应于我的安装路径:'C:GNUstep \ include \ w32api.h' – Emmanuel

+0

就是这样。现在我可以放弃对着墙壁的撞击了。我之前曾在另一个文件夹中安装了MinGw,并且我的Path语句指向它。谢谢一堆。 – TheGump

+0

尝试使用gnustep-make包进行构建。在GNUstep邮件列表上询问是个好主意。 –

回答

-4

这个问题似乎出现在您下载的foundation/foundation.h库中。这里真正的问题是,您似乎在下载.exe时使用PC,因此我想知道,您为什么在Objective-C中编程?仍然使用Objective-C的唯一平台是iOS/Apple平台,您实际无法使用Apple计算机进行有效编码。如果你只是想学习Objective-C,因为你打算很快进入iOS,那么我明白,但如果你不打算这样做,那么没有理由学习Objective-C,你最好学习Java,C#或C++ 。

对您的问题更具体的答案是,WSAEVENT是一个用于Windows线程的信号。机会是某种程度上你的系统没有正确地找到它的支持,这可能是因为w32api.h被删除了,它引用了WSAEVENT的位置。

+0

他说他使用的是gnustep,它是ObjC Apple框架的一个端口,所以这不是问题。 – Lance

+0

你提出的iOS/Apple的东西其实有点儿有趣。我甚至在看Objective-C的原因是因为我最近开始的工作有一堆用Objective-C编写的旧代码,它全部运行在Windows环境中。我还想知道他们为什么使用Objective-C,而我刚才说它是很久以前写的。我的工作不需要学习,但它会很有用。 – TheGump

+0

仅仅因为他使用框架并不意味着它可以正常工作,他可能会遇到问题,他下载的版本,他建立它的方式,他的系统设置或许多其他事情,因此查看它是完全公平的作为一个问题。 不幸的是,我们留下的旧代码经常是这样。如果你无法得到它的工作,你可以做的另一件事是看看小谈话。 Objective-C是以类似的方式构建的,所以如果你知道C和Small-Talk,你会理解Objective-C。 – Dave