一、MinGW,MSYS,GTK...编译libsvg,libsvg-cairo,...
1. 下载MinGW, MSYS, GTK等环境基础环境安装包,并安装。
a) MinGW, MSYS:
访问http://sourceforge.net/projects/mingw/files/ 。
选择“Download Now!MinGW-5.1.6.exe”、 展开MSYS Base System->msys-1.0.11,选择“MSYS-1.0.11.exe”。
安装使用缺省路径C:/MinGW和C:/msys/1.0
b) GTK合集
访问http://gladewin32.sourceforge.net/
下载 gtk-2.12.9-win32-2.exe、gtk-dev-2.12.9-win32-2.exe
安装使用缺省路径C:/GTK
c) gdb for MinGW
下载http://jaist.dl.sourceforge.net/sourceforge/mingw/gdb-5.2.1-1.exe
d) ActivePerl
访问http://www.activestate.com/activeperl/
下载ActivePerl-5.10.1.1006-MSWin32-x86-291086.msi
perl在编译pixman的时候会需要,而pixman并没有被缺省包含在gtk-dev-2.12.9-win32-2.exe程序中。
e) 依次安装上述程序,环境变量会被安装包自动设置。
2. 下载pixman、libsvg、libsvg-cairo并编译安装(cairo、libpng、libjpeg、zlib等已经被安装在C:/GTK中了)
a) pixman,访问http://cairographics.org/releases/ 下载(如前所述,pixman没有被gtk-dev-2.12.9-win32-2.exe打包进去,所以才自己编译)
pixman-0.17.2.tar.gz
b) 访问http://www.cairographics.org/snapshots/ 下载
libsvg-0.1.4.tar.gz
libsvg-cairo-0.1.6.tar.gz
c) 编译方法很简单,先解压,然后进入源代码主目录。依次运行
./configure --prefix=/c/GTK
make
make install
之所以使用--prefix=/c/GTK,是因为我希望把xxx.a库文件和包含头文件安装到/c/GTK/lib和/c/GTK/include目录下,这样文件目录比较整洁。
当你遇到“pkg-config找不到xxx库”时,不要慌张,在当前窗口键入以下命令再试试:
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/mingw/lib/pkgconfig:/usr/local/lib/pkgconfig
3. 如果一切顺利,应该可以在C:/GTK/lib下看到libcairo.a、libsvg.a、libsvg-cairo.a和其它库文件,当然C:/GTK/include下也应该有相应的.h头文件。
二、编写一个查看svg的小程序svgviewer.exe
svgviewer至少需要调用gtk及cairo,并在窗口绘图的基础框架,所以我参考了cairo clock的教学文章和源码,然后加以发展。
http://gnomejournal.org/article/34/writing-a-widget-using-cairo-and-gtk28
文件清单如下:
svgviewer.h(由clock.h发展而来)
svgviewer.c(由clock-ex1.c发展而来)
svgviewer_main.c(由main.c发展而来)
makefile(自己写的)
注意:
在编写makefile过程中,因为错误信息被显示为乱码而不知所措,郁闷了很长时间。后来根据一篇解决MSYS下中文乱码问题的文章才将当前语言环境改为英文。
export LANG=en
或者设置环境变量LANG=en
后来才发现错误多半是 undefined reference to 'xxx_function',那么在gcc编译指令后加入-lxxx即可。
整个研究过程远比文章要来的复杂。比如我是在经历了windows的失败痛苦之后,先在ubuntu下获得成功经验,才回到windows下开发成功的。
分享源码如下:
[svgviewer.h]
[svgviewer.c]
[svgviewer_main.c]
[makefile]
该程序使用方法:
./svgviewer.exe tiger.svg
就能看到经典的老虎