2009-09-15 64 views
2

我正在探索在Windows上編譯GNUstep的應用程序。這是我的main.m文件:如何編譯在Windows上使用NSApplication的GNUstep應用程序?

#import <???/???.h> 

int main(int argc, const char *argv[]) 
{ 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    [NSApplication sharedApplication]; 
    [pool release]; 
} 

我意識到這是一個不完整的片段,至少可以說,它顯然不會做任何事情。我嘗試了幾種不同的導入語句,包括Cocoa/Cocoa.h,GNUstepGUI/GMAppKit.h等。但是我總是遇到編譯錯誤,似乎無法找到在線幫助。

這是我的編譯命令,我從MinGW的shell中運行:

 
gcc -o test main.m -I /GNUstep/System/Library/Headers/ \ 
    -L /GNUstep/System/Library/Libraries/ -lobjc -lgnustep-base \ 
    -fconstant-string-class=NSConstantString -enable-auto-import 

這是我得到的錯誤:

 
c:/WINDOWS/TEMP/ccHxKZG2.o:main.m(.data+0x390): undefined reference to 
    '___objc_class_name_NSApplication' 
collect2:ld returned 1 exit status 

什麼,我需要#進口任何想法,或者需要在我的編譯命令中修復什麼?

謝謝!

回答

2

這是一個鏈接器錯誤。 #import是一個預處理指令;它不會解決鏈接中的錯誤,無論如何,如果您有預處理器錯誤,您的鏈接就不會得到。

你需要鏈接到基金會和AppKit(特別是後者,NSApplication),或任何GNUstep的等價物。

3

感謝Peter Hosey我能對自己谷歌的頁面的答案:

http://psurobotics.org/wiki/index.php?title=Objective-C

與OS X的開發,你需要一個 「Makefile文件」:

將這個成一個在同一目錄作爲源名爲「GNUmakefile」的文件:

 
include $(GNUSTEP_MAKEFILES)/common.make 

APP_NAME = MyAppName 
MyAppName_HEADERS = 
MyAppName_OBJC_FILES = main.m 
MyAppName_RESOURCE_FILES = 

include $(GNUSTEP_MAKEFILES)/application.make 

然後執行

make

頁面說要執行

openapp ./MyAppName.app
但.app文件夾中的.exe文件似乎獨立運行。

+6

「與OS X開發不同,你需要一個」makefile「」不完全。您需要鏈接正確的庫。使用預先安裝的Makefile模板只是一個簡單的方法。 Mac OS X上的Xcode項目模板也是如此。 –

+0

我很好奇如何鏈接到庫 - 我在上下搜索了gcc和gnustep文檔,但沒有找到我正在尋找的內容(事實上可能是我的問題 - 我甚至不知道我知道我在找什麼)。 我的應用程序僅使用-framework選項編譯OS X,但在Windows中不可用。 –

+0

答案將在GNUstep提供的Makefiles中。 –

相關問題