這篇文章將會介紹如何在 MS-Windows 系統中利用 GNUstep 編譯 Objective-C 的程式。
非技術人員,或是對 Objective-C 沒有興趣的人可以跳過。 ^^;
- 使用 msys 編譯的方法:
- 首先至 GNUstep 的網站下載最新的 installer。(下載版號最新的執行檔就可以了)
- 安裝 installer。(以下說明假設 GNUstep 是裝在 C:GNUstep 這個目錄下)
- 開啟 msys。
- 在 home directory 下開一個叫做 .profile 的檔案,裡面放這兩行設定:
export OBJC_INCLUDE_PATH=/c/GNUstep/System/Library/Headers/ export LIBRARY_PATH=/c/GNUstep/Library/Libraries/
說明:這兩行是在設定環境變數,分別是設定 Objcective-C 的 header files 的位置,以及 library 的位置。GCC 會根據這兩個路徑去搜尋 header files & libraries。
- 重新開啟 msys,或是在命令列執行下面的命令:
source ~/.profile
- 現在你可以編譯了。記得在 link 的時候必須指定要 link objc 和 gnustep-base 等兩個 libraries:
gcc -o test.exe test.m -lobjc -lgnustep-base
- 使用 cmd.exe(命令提示字元)編譯及執行編譯結果:
- 依據前面的步驟 1. 2. 安裝 GNUstep 套件。
- 「開始→控制台→系統→進階→環境變數」(以 Windows XP 為例)
-
在 Path 環境變數中,增加以下兩個目錄:
C:GNUstepDevelopmentmsys1.0mingwbin C:GNUstepSystemTools
前者是為了能執行 gcc,後者是為了 gnustep-base.dll。(當然,把 gnustep-base.dll 放到 WindowsSystem 下面也可以)
- 增加一個環境變數 OBJC_INCLUDE_PATH,其值為 C:GNUstepSystemLibraryHeaders。
-
增加一個環境變數 LIBRARY_PATH,其值為 C:GNUstepSystemLibraryLibraries。
增加上述這兩項的理由和前面 msys 的 4. 相同。
- 現在你也可以在 cmd 下編譯了,語法和 msys 下相同。
- 參考文件:
- comp.lang.objective-C FAQ -- David Stes
- GCC Online Manual -- Free Software Foundation
你好。
我编译的时候遇见错误
Info: resolving ___objc_class_name_Object by linking to __imp____objc_class_name_Object (auto-import)
请问什么情况会出现这种错误,how to solve it?
bilbo 您好!
首先跟您說聲抱歉。
當年在成功設定好 Objective-C 的環境後不久,我就沒有再接觸它了,
因此恐怕無法協助解決您的問題。
您可以試著把這類的問題發表到其他程序設計相關的論壇,
我相信一定會有其他的高手願意幫忙的。
提供您幾個方向:
1. 是否曾經成功編譯任何範例程式?例如簡單的 Hello World…etc.
若無,那可能和環境的安裝設定有關係;
若有,那環境應大致沒問題,可能是程式撰寫的問題。
2. 若懷疑和程式本身有問題,當您發問時,你應該可以將程式源碼貼出來,給其他人更多的線索。
經過了快半年,不知道 bilbo 還會不會看到以下的說明。 XDDD
最近又安裝了 0.22 版的 GNUstep 來玩。
然後在編譯簡單的測試程式時,也遇到了 bilbo 提到的現象。
不過我看了一下,其實這段訊息只是 “info”,不是 “error” 也不是 “warning”。
它是在說 linker 使用 auto-import 的方式將 ___objc_class_name_Object 連結到 __imp____objc_class_name_Object 上。
在我碰到的情況中,最後執行檔還是順利產生出來。
若是要避開這個訊息,可以在 gcc 的參數中加上:
-Wl,–enable-auto-import
請注意:中間的逗號是必要的,而且逗號之後不能有空隔。
整個參數的意思是:把 “–enable-auto-import” 這個參數傳給 linker。
(-Wl 中的 ‘l’ 指的就是 linker)
而 –enable-auto-import 則是 Win32 版的 GCC 特有的參數。
實際的意義是什麼….就請各位自行查閱相關的文件了。 🙂
參考資料:
http://d.hatena.ne.jp/jmax/20080902 (日文)