VS2005编译Cairo1.8

第一篇将流行的开源矢量库串起来乱侃了一番,希望还不了解矢量库的网友已经知道了这些大名鼎鼎的开源Project。了解了之后就要使用他们,但是使用的第一步,应该是先编译过去,然后才能谈使用。编译都没有做到的话,使用起来就更加困难重重了。按我之前的计划,将先用VisualStudio 2005将Cairo、Skia这两个库编译过去,然后再说怎么来用他们。

 

本篇,就是Cairo1.8版移植到VC下的编译过程。之所以说移植,是因为这两个工程自身都不带VC Project,而直接建立一个工程将代码直接加进来又编译不过去,这意味着需要修改代码。也说明这些工程在开发的过程中,也没有太多的考虑要用VC来编译。但VC的使用者不在少数,这是一个造福“人类”的过程。另外Cairo其实已经出了1.9.x版了,但是本篇只编译1.8的原因是1.9版的修改量相当的巨大,几乎每一个代码文件都有着不小的改动,而且经过1.9的一番改动之后,要移植到VC就更为困难了。至少我进行了一次简单尝试之后发现没有成功,其复杂度远比1.8高,加上又没有更多的时间去研究他了,于是就放弃1.9版了。但是1.8的移植仍然是很有价值的,至少目前还在使用1.8甚至1.8以下版本的软件工程还是很多的,而且1.8版的效率也还是相当不错的!

 

好了,废话不多说,我们按步就班的开始移植工作。

第一步就是要先下载Cairo以及与之关联的工程包,关联的工程列表如下:

Cairo:http://www.cairographics.org/releases/ 这里有Cairo的历史版本,我们下1.8.10就可以了,这也是放出来的1.8的最高版本了

Pixman:和上面同一个链接,下载其0.18.4,这是可以配合1.8的版本,0.19的Pixman我没有测试过,有兴趣各位可以自行测试

Zlib、Libpng:这两个我就不多说了,自己Google吧…………

下完以上4个工程之后,Zlib和Libpng两个的编译是不需要讲的,因为他们自带VC的工程文件,解包,双击,Build,搞定。

 

Pixman是pixel manipulation的意思,即像素操作,这是一套工程无关的以位图/像素运算为基础的SDK,其包含的功能其实也挺丰富的,Blend/AlphaBlend、Edge Raster、Gradient Fill、Region、Fill等一大堆,而且还有SSE优化,这是给Cairo用的底层库。马上我们就来编译这个库。

 

第二步,编译Pixman,然后才能编译Cairo。编译Pixman的过程,其实是比较轻松的,建立VC工程(最后使用.lib工程),将解开后的Pixman包文件里的所有.c文件除pixman-vmx.c、pixman-arm-neon.c和pixman-arm-simd.c这三个文件不加,pixman-conical-gradient.c加不加无所谓(我就没有加),其它的都加进来。而.h文件就无所谓了,加不加入工程都可以正常编译。然后给工程的Debug和Release版都加入USE_MMX、USE_SSE2和PACKAGE这3个宏,Build吧!这一步应该是比较轻松的就可以通过的。如果出现有个体差异,请注意观察和解决。如果解决不了,可以通过QQ找我帮助。

 

第三步,编译Cairo。这一步就相对复杂点了,因为需要少量的修改代码。而且在编译之前,需要进行一点点小的Cairo知识普及:

 

Cairo有一个最大的特点就是支持类型众多的Backends,也就是我在第一篇里提到过的各种Render Target,如PDF/SVG/GDI等等。每一种Backends,其对应有一个.c文件来实现。本篇没有打算将每一个Backends都编译过去,那样的话篇章就太长了,所以本篇只选择了几个最常用的,基本上也是大家都用得到其它的可能基本都用不到的Backends,将其编译过去。剩下的那些如果需要的话,可以按照我说的方法,依葫芦画瓢的加入工程并编译过去。另外Cairo支持使用FreeType字体,但既然我们是用VC来做编译,那当然就要使用Win32的GDI字体了,况且GDI字体有一个好处就是无需做任何配置,就可以生成出质量很好的字体,不比FreeType差,FreeType的那个尤其是AntiAliasing效果我是看着不太舒服的。。。。。。

 

 现在建立Cairo的工程DLL(用Lib也可以,只有一点点的小区别,下面将会说明),将下面的.c文件添加到工程里:

cairo-analysis-surface.c

cairo-arc.c

cairo-array.c

cairo-atomic.c

cairo-base85-stream.c

cairo-bentley-ottmann.c

cairo-cache.c

cairo-cff-subset.c

cairo-clip.c

cairo-color.c

cairo-debug.c

cairo-deflate-stream.c

cairo-fixed.c

cairo-font-face-twin-data.c

cairo-font-face-twin.c

cairo-font-face.c

cairo-font-options.c

cairo-freelist.c

cairo-gstate.c

cairo-hash.c

cairo-hull.c

cairo-image-surface.c

cairo-lzw.c

cairo-matrix.c

cairo-meta-surface.c

cairo-misc.c

cairo-mutex.c

cairo-output-stream.c

cairo-paginated-surface.c

cairo-path-bounds.c

cairo-path-fill.c

cairo-path-fixed.c

cairo-path-stroke.c

cairo-path.c

cairo-pattern.c

cairo-pdf-operators.c

cairo-pdf-surface.c

cairo-pen.c

cairo-png.c

cairo-polygon.c

cairo-ps-surface.c

cairo-rectangle.c

cairo-region.c

cairo-scaled-font-subsets.c

cairo-scaled-font.c

cairo-skiplist.c

cairo-slope.c

cairo-spline.c

cairo-stroke-style.c

cairo-surface-fallback.c

cairo-surface.c

cairo-system.c

cairo-traps.c

cairo-truetype-subset.c

cairo-type1-fallback.c

cairo-type3-glyph-surface.c

cairo-unicode.c

cairo-user-font.c

cairo-version.c

cairo-wideint.c

cairo-win32-font.c

cairo-win32-printing-surface.c

cairo-win32-surface.c

cairo.c

check-link.c

 

好像列表有点长,将就吧……

添加完之后,开始修改代码文件:

A、如果是编译为lib工程(编译DLL的跳过),打开cairo.h在第53行左右位置,加入下面代码:

#ifdef _LIB

#define CAIRO_WIN32_STATIC_BUILD 1

#endif

因为建立为了LIB工程的话,VC会自动的加入预定义的宏_LIB,所以判断如果有这个宏,就定义CAIRO_WIN32_STATIC_BUILD为1

 

B、打开cairo-features.h文件,将#define CAIRO_HAS_FT_FONT 1改为0,#define CAIRO_HAS_SVG_SURFACE 1改为0,CAIRO_HAS_XLIB_SURFACE 1和CAIRO_HAS_XLIB_XRENDER_SURFACE 1都改为0。

 

C、(编译为DLL的可以忽略)打开cairoint.h将下面的定义:

#ifdef _MSC_VER

#define cairo_public __declspec(dllexport)

#endif

 

 改成:

 

#ifdef _MSC_VER

#ifndef _LIB

#define cairo_public __declspec(dllexport)

#endif

#endif

 

代码修改过程到此为止,怎么样,简单吧?呵呵,因为我们只选择了PDF/GDI/PS/Image/PNG这几种Backends,所以修改过程是非常简单的。

 

现在打开工程的Preprocessor属性页,也就是预定义管理,添加下面的预定义宏:

CAIRO_HAS_WIN32_FONT

CAIRO_HAS_WIN32_SURFACE

CAIRO_HAS_PNG_FUNCTIONS

CAIRO_HAS_PS_SURFACE

CAIRO_HAS_PDF_SURFACE

 

 如果是DLL工程,再打开附加Lib属性页,把zlib、libpng和pixman这三个工程编译好的lib文件加进去,或者使用VC特有的工程依赖自动来管理也可以。编译为lib的话就不需要了,因为这些库将会在使用cairo.lib的时候才会需要用到。

 

所以的准备工作都已经就绪,下一步就是泡杯茶,并按下Build按钮,等待还算是比较快的Cairo1.8编译过程吧!

 

 

PS:编译过程中的一个注意事项:在建立工程或者打开zlib/libpng这些工程的时候,一定要注意看CRT库的设定,必须要全部编译为相同的CRT库,比如要么都是MultiThread DLL要么都是MultiThread,或者就两个都编译出来也可以。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Cairo是一个用于2D图形绘制的开源,它可以被用于Microsoft的Visual Studio 2013编译环境中。通过在VS2013中编译Cairo,你可以在Windows平台上使用Cairo的各种功能。 首先,你需要确保你的计算机上已经安装了Visual Studio 2013开发环境。然后,你可以从Cairo的官方网站上下载源代码,或者使用Git从源代码中克隆源代码。 接下来,你需要创建一个新的项目,在项目中包含Cairo的源代码。打开Visual Studio 2013,点击“文件”菜单,然后选择“新建”->“项目”。在弹出的对话框中选择“Visual C++”->“空项目”,并为项目指定一个名称和位置。 然后,你需要将Cairo的源代码添加到项目中。右键点击项目名称,选择“添加”->“现有项”,然后选择Cairo的源代码文件,点击“添加”按钮将其添加到项目中。 在项目中添加Cairo的源代码后,你需要在项目的属性中设置编译选项。右键点击项目名称,选择“属性”,在弹出的属性对话框中找到“配置属性”->“C/C++”->“常规”->“附加包含目录”,在该字段中添加Cairo的头文件所在的目录。 然后,你需要设置链接选项。在属性对话框中选择“链接器”->“常规”->“附加目录”,并将Cairo文件所在的目录添加到该字段中。同时,在“输入”->“附加依赖项”字段中添加Cairo文件的名称。 最后,你可以编写你的应用程序代码并进行编译。在项目中创建一个源文件,在代码中包含Cairo的头文件,然后使用Cairo提供的函数和接口进行图形绘制。 通过按下F5键或点击“生成”->“生成解决方案”来编译和运行项目。如果你没有错误和警告信息,说明编译成功。你可以使用Cairo提供的函数和接口来创建各种图形效果,如直线,矩形,圆形等等。 总之,通过在Visual Studio 2013中编译Cairo,你可以利用Cairo的强大功能,开发出各种2D图形应用程序,并在Windows平台上运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值