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

继续加油啰!