這篇文章將會介紹如何在 MS-Windows 系統中利用 GNUstep 編譯 Objective-C 的程式。

非技術人員,或是對 Objective-C 沒有興趣的人可以跳過。 ^^;


    使用 msys 編譯的方法:

  1. 首先至 GNUstep 的網站下載最新的 installer。(下載版號最新的執行檔就可以了)
  2. 安裝 installer。(以下說明假設 GNUstep 是裝在 C:GNUstep 這個目錄下)
  3. 開啟 msys。
  4. 在 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。

  5. 重新開啟 msys,或是在命令列執行下面的命令:
    source ~/.profile
    
  6. 現在你可以編譯了。記得在 link 的時候必須指定要 link objc 和 gnustep-base 等兩個 libraries:

    gcc -o test.exe test.m -lobjc -lgnustep-base
    

    使用 cmd.exe(命令提示字元)編譯及執行編譯結果:

  1. 依據前面的步驟 1. 2. 安裝 GNUstep 套件。
  2. 「開始→控制台→系統→進階→環境變數」(以 Windows XP 為例)
  3. 在 Path 環境變數中,增加以下兩個目錄:

    C:GNUstepDevelopmentmsys1.0mingwbin
    C:GNUstepSystemTools
    

    前者是為了能執行 gcc,後者是為了 gnustep-base.dll。(當然,把 gnustep-base.dll 放到 WindowsSystem 下面也可以)

  4. 增加一個環境變數 OBJC_INCLUDE_PATH,其值為 C:GNUstepSystemLibraryHeaders。
  5. 增加一個環境變數 LIBRARY_PATH,其值為 C:GNUstepSystemLibraryLibraries。

    增加上述這兩項的理由和前面 msys 的 4. 相同。

  6. 現在你也可以在 cmd 下編譯了,語法和 msys 下相同。

By closer

3 thoughts on “在 Windows 下編譯 Objective-C 注意事項”
  1. 你好。
    我编译的时候遇见错误
    Info: resolving ___objc_class_name_Object by linking to __imp____objc_class_name_Object (auto-import)
    请问什么情况会出现这种错误,how to solve it?

  2. bilbo 您好!
    首先跟您說聲抱歉。
    當年在成功設定好 Objective-C 的環境後不久,我就沒有再接觸它了,
    因此恐怕無法協助解決您的問題。
    您可以試著把這類的問題發表到其他程序設計相關的論壇,
    我相信一定會有其他的高手願意幫忙的。
    提供您幾個方向:
    1. 是否曾經成功編譯任何範例程式?例如簡單的 Hello World…etc.
    若無,那可能和環境的安裝設定有關係;
    若有,那環境應大致沒問題,可能是程式撰寫的問題。
    2. 若懷疑和程式本身有問題,當您發問時,你應該可以將程式源碼貼出來,給其他人更多的線索。

  3. 經過了快半年,不知道 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 (日文)

發表迴響