上週五ㄚ琪為了FontConfig編譯不成功甚是掛念,try了好一陣子,終於沒步了,只好祈禱看看了,過了不久,當然還是沒有頭緒,於是乎想要好好請教Compiling the GTK+ stack using Visual C++ 2008/2010的作者Chun-wei Fan,你絕對不相信這裡頭的連結根本沒屁用,ㄚ琪於是乎想到了在Gtk+ list論壇上好像有一陣子有在討論GTK 3在Windows下的編譯問題,就拿起這個Chun-wei Fan當關鍵字找了,
我就在猜這個Fan Chun-wei‘" <fanc999 yahoo com tw>這個會不會就是我要找的作者,我舊試著發出這樣的mail了:
您好…
請問一下,我看了你這篇的文章用Visual C++ 2010 express編譯FontConfig
發現有下列的錯誤:
—— 已開始全部重建: 專案: fontconfig, 組態: Debug Win32 ——
dirent.c
ftglue.c
d:sourcecfontconfig-2.8.0srcftglue.c(91): warning C4018: ‘>’ : signed/unsigned 不相符
fcxml.c
d:sourcecfontconfig-2.8.0srcfcxml.c(107): warning C4090: ‘=’ : 不同的 ‘const’ 限定詞
d:sourcecfontconfig-2.8.0srcfcxml.c(155): warning C4090: ‘=’ : 不同的 ‘const’ 限定詞
fcstr.c
fcserialize.c
fcpat.c
fcname.c
fcmatrix.c
fcmatch.c
fclist.c
d:sourcecfontconfig-2.8.0srcfclist.c(84): warning C4090: ‘函式’ : 不同的 ‘const’ 限定詞
fclang.c
d:sourcecfontconfig-2.8.0srcfclang.c(54): warning C4018: ‘>=’ : signed/unsigned 不相符
d:sourcecfontconfig-2.8.0srcfclang.c(68): warning C4018: ‘>=’ : signed/unsigned 不相符
fcinit.c
fcfs.c
fcfreetype.c
fcformat.c
fcdir.c
fcdefault.c
fcdbg.c
d:sourcecfontconfig-2.8.0srcfcdbg.c(67): warning C4028: 型式參數 1 與來自宣告的不同
fccharset.c
fccfg.c
正在產生程式碼…
d:sourcecfontconfig-2.8.0srcfcformat.c(611): warning C4700: 使用了未初始化的區域變數 ‘idx’
正在編譯…
fccache.c
fcblanks.c
fcatomic.c
正在產生程式碼…
正在建立程式庫 Debugfontconfig.lib 和物件 Debugfontconfig.exp
LINK : warning LNK4098: 預設的程式庫 ‘MSVCRT’ 與其他使用的程式庫衝突,請使用 /NODEFAULTLIB:library
fcfreetype.obj : error LNK2019: 無法解析的外部符號 _FT_Get_BDF_Property 在函式 _FcFreeTypeQueryFace 中被參考
Debugfontconfig.dll : fatal error LNK1120: 1 個無法解析的外部符號
—— 已開始全部重建: 專案: fc-cache, 組態: Debug Win32 ——
dirent.c
fc-cache.c
正在產生程式碼…
fc-cache.vcxproj -> D:sourceCfontconfig-2.8.0Debugfc-cache.exe
C:Program FilesMSBuildMicrosoft.Cppv4.0Microsoft.CppCommon.targets(113,5): error MSB3073: ".Debugfc-cache.exe -s -f -v
C:Program FilesMSBuildMicrosoft.Cppv4.0Microsoft.CppCommon.targets(113,5): error MSB3073: :VCEnd" 命令以返回碼 -1073741515 結束。
.
.
.
—— 已開始全部重建: 專案: fc-scan, 組態: Debug Win32 ——
fc-scan.c
d:sourcecfontconfig-2.8.0fc-scanfc-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 中被參考
Debugfc-scan.exe : fatal error LNK1120: 3 個無法解析的外部符號
想請教一下你是如何解決這些問題的?
藍色字體的錯誤訊息才是我最關注的,其他的應該都可以獲得解決。
在同一天就得到作者的回覆:
關於您所提的問題,請問您是否使用FreeType中buildwin32visualc中的專案來編譯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)srcbase 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這個檔案,ㄚ琪一直知道是這個問題,但是不知道要在這裡作業。
我的媽啊,沒想到這麼簡單,一直在想說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_compilationvs10Win32include到其他Include目錄,至於C:gtk_compilationvs10Win32lib則到其他程式庫目錄下。
4.檢查config.h.vc跟fonts.conf.vc,這我倒是沒檢查了。
5.建置組態的設定,參考之前的建置設定
6.放下列的檔案:
-我只有fontconfig.dll放到C:gtk_compilationvs10Win32bin下
-將程式碼所在的資料夾fontconfig資料夾全部放到C:gtk_compilationvs10Win32
-將fontconfig.lib放到C:gtk_compilationvs10Win32lib
當然這樣的建置操作會有一個問題就是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-runtimeintl裡的原檔案。
4.在Visual Studio 命令提示字元 (2010)下執行:
cmake -G "NMake Makefiles" -DCMAKE_INSTALL_PREFIX=C:gtk_compilationvs10Win32
有一大堆的說明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_compilationvs10Win32
這裡也有說明一堆函式庫的使用設定,ㄚ琪也是照樣忽略不管。
3.執行nmake,執行nmake install
12. libffi
繼續加油囉!