ㄚ琪用Mingw编译Glib 2.30.0失败了,主因是编译到需要Python时,Mingw不支援,这让人很是懊恼,看来要跨平台使用GTK不是那么简单,可是ㄚ琪又是一个很执着的人,所以还是另觅其他管道,这回要改用免费的Microsoft Visual C++ 2010 Express来编译了,你可能会想微软的GUI不是做得很好了,而且很简单,干嘛还这么麻烦来编译GTK,唉,这是GTK跨平台的坚持啊,而且因为Visual系列是Winodws下的主流,以及很多Linux-like的开发套件也支援Visual系列的编译,所以我们就转个方向吧。
希望这不会很难,而且Gnome的站上已经有这篇Compiling the GTK+ stack using Visual C++ 2008/2010,你会问我这篇是怎知道的,其实在GTK+-3.2.0的README.win32里头已有这样的介绍,看起来要迈向编译GTK 3可能就要用这种方式了。
准备
因为文章已有了,所以ㄚ琪就简述一路的操作,因为ㄚ琪是用Windows XP,所以要确认有cl.exe跟ml.exe,再来建立一些目录:
mkdir c:\gtk_compilation\vs10\Win32 mkdir c:\gtk_compilation\vs10\Win32\bin mkdir c:\gtk_compilation\vs10\Win32\include mkdir c:\gtk_compilation\vs10\Win32\lib
相关档案
1. ZLib
编辑win32/makefile.msc
CFLAGS = -nologo -MD -W3 -O2 -Oy- -Zi -Fd"zlib" $(LOC)
改为
CFLAGS = -nologo -MDd -W3 -Od -Zi -Fd"zlib" $(LOC)
主因是为了侦错使用。
使用Visual Studio 命令提示字元 (2010)进入zlib的目录编译:
cd $(the_folder_where_zlib_was_unpacked) nmake -f win32/makefile.msc LOC="-DASMV -DASMINF" OBJA="inffas32.obj match686.obj"
/*这是针对32-bit用的*/ nmake -f win32/Makefile.msc AS=ml64 LOC="-I. -I.\win32 -DASMV -DASMINF" OBJA="inffasx64.obj gvmat64.obj inffas8664.obj"
/*这是针对x86-64用的,这是一行的指令*/
一开始编译的时候,还发现:
adler32.c : fatal error C1902: 程式资料库管理员不相符; 请检查您的安装
NMAKE : fatal error U1077: ‘”C:\Program Files\Microsoft Visual Studio 10.0\VC\BI
N\cl.EXE”‘ : 传回码 ‘0x2’
Stop.
Orz.才刚开始困难就出现了,还好有解,只要把C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE下的mspdbsrv.exe复制到C:\Program Files\Microsoft Visual Studio 10.0\VC\bin也就是cl.exe所在的目录,真的就可以了,当然ㄚ琪也不再解释原因了,各位可以去Google看看原因,不过我猜啦,因为微软的东西有IDE加持,所以在视窗下使用比较不会有问题,不过命令列下编译可能会有一些档案路径没设对的问题发生。
之后真的再编译就成功了。
这里说:
-复制ZLib的根目录里的zlib.h跟zconf.h到c:\gtk_compilation\vs10\Win32\include
-复制Zlib的根目录里的zdll.lib跟zlib1.lib到c:\gtk_compilation\vs10\Win32\lib
(注:我只有zdll.lib跟zlib.lib两个档案,有点不一样,做mark起来注意)
-复制Zlib的根目录里的zlib1.dll到c:\gtk_compilation\vs10\Win32\bin
2. LibPNG
文章中是使用中文的visual视窗介面的截图,英文说明,在x64的操作,ㄚ琪则以Win32为例来纪录这次的经验:
ㄚ琪下载的是lpng155.zip
解压缩然后进到lpng155\projects\vstudio,开启vstudio.sln
ㄚ琪手快已经把pngvalid下的zlib砍掉了,而且1.55版的跟原文有些许出入。
另外Win32的组态原本就有了,所以就不用再新增。
进入每个专案的属性页,其实ㄚ琪只有玩libpng这个属性页。
2.1.原文是新增zlib1.lib (或 zlib1d.lib)但是我只有zlib.lib,而且与原设定同,不修改
2.2.新增c:\gtk_compilation\vs10\Win32\include到C/C++->一般的其他Include目录中
2.3. 新增c:\gtk_compilation\vs10\Win32\lib到连结器->一般的”其他程式库目录”中。
ㄚ琪使用组态: Release Win32编译时会有
正在建立程式库 D:\source\C\lpng155\projects\vstudio\Release\libpng15.lib 和物件 D:\source\C\lpng155\projects\vstudio\Release\libpng15.exp
LINK : warning LNK4098: 预设的程式库 ‘MSVCRTD’ 与其他使用的程式库冲突,请使用 /NODEFAULTLIB:library
这样的警告,而且建置: 1 成功、0 失败、1 最新、0 略过,有一个编译失败了。
但是在组态: Debug Win32编译时,是全部重建: 2 成功、0 失败、 0 略过,却是成功了,看起来可能是zlib是侦错模式的编译才有这样的状况
放置档案到下列的位置:
- -复制png.h、pngconf.h、pnglibconf.h及pngpriv.h到c:\gtk_compilation\vs10\Win32\include
-复制libpng15.lib [或侦错模式的libpng15d.lib] 到c:\gtk_compilation\vs10\Win32(ㄚ琪侦错模式下还是为libpng15.lib)
-复制libpng15.dll [或侦错模式的libpng15d.dll]到c:\gtk_compilation\vs10\Win32\bin(ㄚ琪侦错模式下还是libpng15.dll)
3. Pixman Library
这里的说明ㄚ琪实做的时候有点怀疑纳闷,所以先测试一下,下载的是pixman-0.22.2.tar.gz,解压缩程式挡到c:\gtk_compilation\,下载pixman-vsproj.zip,解压缩到c:\gtk_compilation,开启build\win32\vs10下的pixman.sln,然后依据选择事组态来建置,.DLL、.Lib跟标头档复制到适当的地方(在 c:\gtk_compilation\vs10\Win32\bin、c:\gtk_compilation\vs10\Win32\lib跟c:\gtk_compilation\vs10\Win32\include下,这里头ㄚ琪奇怪的就是有需要一定要复制到c:\gtk_compilation下吗?看起来不用,因为如果这样就跟前面的建置模式有点不同了,可是建置成功后的复制动作,却又没什么差异。另外ㄚ琪在开启pixman.sln时,会有下面的警告
C:\gtk_compilation\build\win32\vs10\pixman.vcxproj : warning : 找不到专案档 ‘pixman’ 中参考的平台 ‘x64’。请确认您是否将它安装在 ‘%VCTargetsPath%\Platforms\x64’ 之下。
C:\gtk_compilation\build\win32\vs10\install.vcxproj : warning : 找不到专案档 ‘install’ 中参考的平台 ‘x64’。请确认您是否将它安装在 ‘%VCTargetsPath%\Platforms\x64’ 之下。
疑似ㄚ琪的平台不是x64的关系,先暂时不管。
4. IJG JPEG library
下载最新的jpegsr8c.zip,解压缩到jpeg-8c中,原文中有两个步骤,似乎是选择其中一种就行,但是ㄚ琪不是很了解是否有问题,所以两种步骤都执行:
1.就是要建立static的library,因为ㄚ琪使用Visual C++ 2010 Express,所以没注意他说的Visual C++ 2008的情况会有什么事?。
1.1 到jpeg-8c,然后复制改名jconfig.vc为jconfig.h
1.2 命令列字元下执行
nmake -f makefile.vc
(ㄚ琪使用侦错模式) nmake -f makefile.vc NODEBUG=1 (Release)
2.是dll模式的建置。
2.1 下载makefile.vc 跟 jmorecfg.h,然后放到jpeg-8c下,注这两个档案原本就有了,所以ㄚ琪保守其见改名不覆盖
2.2 执行
nmake -f makefile.vc DLL=1
(ㄚ琪使用侦错模式) nmake -f makefile.vc DLL=1 NODEBUG=1 (Release)
3.
-jconfig.h、jerror.h、jmorecfg.h跟jpeglib.h在c:\gtk_compilation\vs10\Win32\include
-libjpeg.lib在c:\gtk_compilation\vs10\Win32\lib
-libjpeg.dll在c:\gtk_compilation\vs10\Win32\bin — 只有DLL下编译才有
-所有的.exe档在c:\gtk_compilation\vs10\Win32\bin
5. LibTIFF
踢到铁板了,错误真多,大挫折来了。(2011/10/04)



