2014-03-13 124 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