在 Windows 下編譯 Objective-C 注意事項

| 有 3 篇回應文章
這篇文章將會介紹如何在 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:\GNUstep\Development\msys\1.0\mingw\bin
    C:\GNUstep\System\Tools
    
    
    前者是為了能執行 gcc,後者是為了 gnustep-base.dll。(當然,把 gnustep-base.dll 放到 \Windows\System\ 下面也可以)
  4. 增加一個環境變數 OBJC_INCLUDE_PATH,其值為 C:\GNUstep\System\Library\Headers。
  5. 增加一個環境變數 LIBRARY_PATH,其值為 C:\GNUstep\System\Library\Libraries。

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

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

此文章所屬分類:

回應、批評與指教(目前有 3 篇)

作者:bilbo

你好。
我编译的时候遇见错误

Info: resolving ___objc_class_name_Object by linking to __imp____objc_class_name_Object (auto-import)

请问什么情况会出现这种错误,how to solve it?

作者:closer Author Profile Page

bilbo 您好!

首先跟您說聲抱歉。
當年在成功設定好 Objective-C 的環境後不久,我就沒有再接觸它了,
因此恐怕無法協助解決您的問題。

您可以試著把這類的問題發表到其他程序設計相關的論壇,
我相信一定會有其他的高手願意幫忙的。

提供您幾個方向:
1. 是否曾經成功編譯任何範例程式?例如簡單的 Hello World...etc.
若無,那可能和環境的安裝設定有關係;
若有,那環境應大致沒問題,可能是程式撰寫的問題。

2. 若懷疑和程式本身有問題,當您發問時,你應該可以將程式源碼貼出來,給其他人更多的線索。

作者:closer Author Profile Page

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

留下您的意見

關於這位部落客

  • closer
  • 被人叫大叔的年紀。
  • 滿地撿得到的資訊工程師。
  • 喜歡酒精、搖滾樂、電影、電玩、漫畫、電腦、棒球、拍照、女孩子。
  • 討厭薑、青椒、芋頭、政客、煙味、キャプテン翼、張學友。
  • 會中文、英文、日文、客家話、河洛話、C 語言。

活動支援

關於這篇文章

這篇文章是 closerDecember 31, 2004 9:35 PM 發表的。

前一篇文章:《《珈琲時光》(大量劇情暴露)

後一篇文章:《《夢幻成真》-- Field of Dreams

回到本站首頁,或是檢視所有的文章彙整列表

Powered by Movable Type 4.1