Boo!FreeType Old Compile Out

上週五ㄚ琪為了FontConfig編譯不成功甚是掛念,try了好一陣子,終於沒步了,只好祈禱看看了,過了不久,當然還是沒有頭緒,於是乎想要好好請教Compiling the GTK+ stack using Visual C++ 2008/2010的作者Chun-wei Fan,你絕對不相信這裡頭的連結根本沒屁用,ㄚ琪於是乎想到了在Gtk+ list論壇上好像有一陣子有在討論GTK 3在Windows下的編譯問題,就拿起這個Chun-wei Fan當關鍵字找了,2011-10-12_155416

我就在猜這個Fan Chun-wei‘" <fanc999 yahoo com tw>這個會不會就是我要找的作者,我舊試著發出這樣的mail了:

您好…
請問一下,我看了你這篇的文章用Visual C++ 2010 express編譯FontConfig
發現有下列的錯誤:
—— 已開始全部重建: 專案: fontconfig, 組態: Debug Win32 ——
  dirent.c
  ftglue.c
d:\source\c\fontconfig-2.8.0\src\ftglue.c(91): warning C4018: ‘>’ : signed/unsigned 不相符
  fcxml.c
d:\source\c\fontconfig-2.8.0\src\fcxml.c(107): warning C4090: ‘=’ : 不同的 ‘const’ 限定詞
d:\source\c\fontconfig-2.8.0\src\fcxml.c(155): warning C4090: ‘=’ : 不同的 ‘const’ 限定詞
  fcstr.c
  fcserialize.c
  fcpat.c
  fcname.c
  fcmatrix.c
  fcmatch.c
  fclist.c
d:\source\c\fontconfig-2.8.0\src\fclist.c(84): warning C4090: ‘函式’ : 不同的 ‘const’ 限定詞
  fclang.c
d:\source\c\fontconfig-2.8.0\src\fclang.c(54): warning C4018: ‘>=’ : signed/unsigned 不相符
d:\source\c\fontconfig-2.8.0\src\fclang.c(68): warning C4018: ‘>=’ : signed/unsigned 不相符
  fcinit.c
  fcfs.c
  fcfreetype.c
  fcformat.c
  fcdir.c
  fcdefault.c
  fcdbg.c
d:\source\c\fontconfig-2.8.0\src\fcdbg.c(67): warning C4028: 型式參數 1 與來自宣告的不同
  fccharset.c
  fccfg.c
  正在產生程式碼…
d:\source\c\fontconfig-2.8.0\src\fcformat.c(611): warning C4700: 使用了未初始化的區域變數 ‘idx’
  正在編譯…
  fccache.c
  fcblanks.c
  fcatomic.c
  正在產生程式碼…
     正在建立程式庫 Debug\fontconfig.lib 和物件 Debug\fontconfig.exp
LINK : warning LNK4098: 預設的程式庫 ‘MSVCRT’ 與其他使用的程式庫衝突,請使用 /NODEFAULTLIB:library
fcfreetype.obj : error LNK2019: 無法解析的外部符號 _FT_Get_BDF_Property 在函式 _FcFreeTypeQueryFace 中被參考
Debug\fontconfig.dll : fatal error LNK1120: 1 個無法解析的外部符號

—— 已開始全部重建: 專案: fc-cache, 組態: Debug Win32 ——
  dirent.c
  fc-cache.c
  正在產生程式碼…
  fc-cache.vcxproj -> D:\source\C\fontconfig-2.8.0\Debug\fc-cache.exe
C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(113,5): error MSB3073: ".\Debug\fc-cache.exe -s -f -v
C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(113,5): error MSB3073: :VCEnd" 命令以返回碼 -1073741515 結束。
.
.
.
—— 已開始全部重建: 專案: fc-scan, 組態: Debug Win32 ——
  fc-scan.c
d:\source\c\fontconfig-2.8.0\fc-scan\fc-scan.c(104): warning C4013: ‘getopt’ 未定義; 假設 extern 傳回整數
fc-scan.obj : error LNK2001: 無法解析的外部符號 _optind
fc-scan.obj : error LNK2001: 無法解析的外部符號 _optarg
fc-scan.obj : error LNK2019: 無法解析的外部符號 _getopt 在函式 _main 中被參考
Debug\fc-scan.exe : fatal error LNK1120: 3 個無法解析的外部符號
想請教一下你是如何解決這些問題的?

藍色字體的錯誤訊息才是我最關注的,其他的應該都可以獲得解決。

在同一天就得到作者的回覆:

關於您所提的問題,請問您是否使用FreeType中build\win32\visualc中的專案來編譯FreeType?GNOME Live!第七節關於FreeType的文章有說明必須要如此去做-因為您提
出的問題似乎跟該部份有關-可不可以麻煩您照當中所提的方式-如有問題煩請不吝提問,謝謝。
願上帝賜福
-范

老實說我不太相信要在visualc下用Microsoft Visual C++ 2010 Express開啟freetype.dsw或是freetype.sln這些舊專案,不是已經有了vc2010這個資料夾可以開啟較新的專案嗎?所以就繼續放著不管了…

沒多久又得到作者的回覆:

另外,因為前兩三天我的fontconfig_vs9.zip有更新過,請問您是什麼時候下載該檔案?可能要再請您在下載,因為先前的版本忽略掉了Debug的組態,新的版本有包含,
且有將dirent的原始碼納入加以同時編譯進FontConfig的DLL以及針對一些部份有做加強,以方便支援x64組態等等
不好意思,也願上帝賜福
-范

哇,這倒是沒注意到,可能是這個原因喔,所以ㄚ琪那時已經想要另外安裝Microsoft Visual C++ 2008 Express來測試了說,不過沒搞完,我就放假去了。

今天又重回原文看一下,準備下載這個所謂的fontconfig_vs9.zip較新的檔,突然發現:

Prior to compiling, please ensure that ftbdf.c from $(FreeType_src_root)\src\base is included in the project under freetype->Source Files->FT_MODULES in the project, or at least is listed as one of the source files to compile.

這段,看起來這段才是我的問題所在啊,ㄚ琪趕緊開啟freetype-2.4.6的資料夾,打開專案,在freetype專案的Source Files->FT_MODULES下是否有ftbdf.c這個檔案,ㄚ琪一直知道是這個問題,但是不知道要在這裡作業。

2011-10-12_161107

我的媽啊,沒想到這麼簡單,一直在想說freetype_d.lib這裡頭到底有沒有編譯這個ftbdf.c,現在看起來是沒有的了,趕緊加,然後下載新的fontconfig_vs9.zip檔案,照著原文的步驟操作,就成功了,這是真的樂的想跳博普舞,哈哈,老實說博普舞是什麼ㄚ琪完全無知說,只是發現這個bop單字很簡單,順便學一下吧。

好了,ㄚ琪就大概說明一下我的步驟:

1.下載fontconfig-2.8.0.tar.gz

2.下載fontconfig_vs9.zip,解壓縮到剛剛的fontconfig-2.8.0資料夾裡頭。

3.如果是像ㄚ琪使用Microsoft Visual C++ 2010 Express,那麼你要加C:\gtk_compilation\vs10\Win32\include到其他Include目錄,至於C:\gtk_compilation\vs10\Win32\lib則到其他程式庫目錄下。

4.檢查config.h.vc跟fonts.conf.vc,這我倒是沒檢查了。

5.建置組態的設定,參考之前的建置設定

6.放下列的檔案:

-我只有fontconfig.dll放到C:\gtk_compilation\vs10\Win32\bin下
-將程式碼所在的資料夾fontconfig資料夾全部放到C:\gtk_compilation\vs10\Win32\

-將fontconfig.lib放到C:\gtk_compilation\vs10\Win32\lib

當然這樣的建置操作會有一個問題就是dirent.c找不到,ㄚ琪只好將dirent.c移到src裡頭,讀者就請注意了。接下來要繼續編譯其他套件啦,讓ㄚ琪給Chun-wei Fan鞠躬一下。

10. gettext-runtime

1.確定你有安裝CMake,以及設定路徑以便在Visual Studio 命令提示字元 (2010)下可以存取,ㄚ琪下在這個cmake-2.8.6-win32-x86.exe最新檔。

2.下載gettext-0.18-runtime sources for VS10

3.用這個intl.def取代gettext-runtime\intl裡的原檔案。

4.在Visual Studio 命令提示字元 (2010)下執行:

cmake -G "NMake Makefiles" -DCMAKE_INSTALL_PREFIX=C:\gtk_compilation\vs10\Win32

有一大堆的說明cmake-gui的使用,ㄚ琪不太瞭解用意,忽略。

5.執行nmake,執行nmake install

11. PCRE

1.下載pcre-8.13.zip

2.在Visual Studio 命令提示字元 (2010)下執行:

cmake -G "NMake Makefiles" -DCMAKE_INSTALL_PREFIX=c:\gtk_compilation\vs10\Win32

這裡也有說明一堆函式庫的使用設定,ㄚ琪也是照樣忽略不管。

3.執行nmake,執行nmake install

12. libffi

繼續加油囉!

Print Friendly, PDF & Email

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料