【问题标题】:Error when compliling Objective-C program编译 Objective-C 程序时出错
【发布时间】:2014-03-13 13:32:56
【问题描述】:

我正在尝试编译我的第一个 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-system-0.30.0-setup.exe 和 gnustep-core-0.34.0-setup.exe 并按顺序安装它们。我将名为 prg1.m 的文件(包含前面的代码)复制到 /GNUstep/msys/1.0/home/username 文件夹中。我打开了 GNUstep shell 并继续发出以下命令:

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;
   ^

有人知道为什么我最后会收到此错误吗?我已经在谷歌上搜索了几个小时,但运气不佳。任何帮助将不胜感激。提前致谢。

【问题讨论】:

  • 您以前安装过 MinGW 吗?我刚刚全新安装了GNUstep MSYS System 0.30.0, GNUstep Core 0.34.0 and GNUstep Devel 1.4.0,但无法重现您的问题。这行c:\mingw\include\w32api.h 也不对应我的安装路径:C:GNUstep\include\w32api.h
  • 就是这样。现在我可以停止用头撞墙了。我之前在不同的文件夹中安装了 MinGw,我的 Path 语句指向它。非常感谢。
  • 尝试使用 gnustep-make 包构建。最好在 GNUstep 邮件列表上提问。

标签: objective-c gcc gnustep


【解决方案1】:

您遇到的问题似乎在您下载的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 所在的位置。

【讨论】:

  • 他说他正在使用 gnustep,这是 Apple 框架的 ObjC 端口,所以这不是问题。
  • 您提出 iOS/Apple 的东西实际上有点有趣。我什至关注 Objective-C 的原因是因为我最近开始的工作有一堆用 Objective-C 编写的旧代码,它们都在 Windows 环境中运行。我还想知道他们为什么使用 Objective-C,而我只是被告知它是很久以前写的。我的工作不需要学习这个,但它会很有用。
  • 仅仅因为他正在使用一个框架并不意味着它可以正常工作,他下载的版本,他构建它的方式,他的系统设置或许多其他事情都可能存在问题,所以它将其视为一个问题是完全公平的。不幸的是,我们经常留下旧代码。如果你不能让它工作,你可以做的另一件事就是看看闲聊。 Objective-C 是用类似的方式构建的,所以如果你了解 C 和 Small-Talk,你就会理解 Objective-C。
  • 理解 Smalltalk 和 C 不会自动让你理解 Objective-C。例如旧代码中的内存管理。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多