windows下编译Cairo图形库1.10.2

来源:互联网 发布:蜂窝网络与无人机战争 编辑:程序博客网 时间:2024/06/16 22:45

上周写一个游戏(http://blog.csdn.net/chenyufei1013/archive/2011/01/26/6165650.aspx)要用到Cairo图形库,于是就去下了个最新版本1.10.2(http://cairographics.org/releases/,文件名:cairo-1.10.2.tar.gz)。由于原先编过1.8.10版本(http://blog.csdn.net/chenyufei1013/archive/2010/08/07/5794910.aspx),所以心里还是有点底的。

      Cairo依赖于三个库:pixman,zlib和libpng。这三个库我并未更新,所以参照1.8.10版本的编译即可。

      我开始是在Mozilla-build工具中编译Cairo的,需要修改C:/mozilla-build/start-msvc9.bat文件,设置环境变量,可以参照下面的设置:

   1: :: ============================================================================
   2: :: Used to build cairo 1.10.2
   3: :: ============================================================================
   4: rem Root of cairo building
   5: set "CAIROROOT=Q:/MineSweeper/Cairo"
   6: rem Add zlib and libpng to LIB
   7: set "LIB=%LIB%;%CAIROROOT%/output-1.10.2"
   8: rem Add zlib and libpng to INCLUDE
   9: set "INCLUDE=%INCLUDE%;%CAIROROOT%/zlib-1.2.5;%CAIROROOT%/libpng-1.5.0"
  10: rem Add cairo, boilerplate, and pixman to INCLUDE
  11: set "INCLUDE=%INCLUDE%;%CAIROROOT%/cairo-1.10.2/src"
  12: set "INCLUDE=%INCLUDE%;%CAIROROOT%/cairo-1.10.2/boilerplate"
  13: set "INCLUDE=%INCLUDE%;%CAIROROOT%/pixman-0.21.4/pixman"
  14: :: ============================================================================

      这里面主要是设置LIB和INCLUDE路径指向pixman、zlib、libpng、所在的目录。

      编译Cairo的时,直接到src子目录下,执行如下命令,分别对应编译Cario动态库和Cairo静态库。

   1: make -f Makefile.win32 static CFG=debug
   2: make -f Makefile.win32 dynamic CFG=debug

      编译Cario的时候需要一个cairo-features.h文件,参考如下建立这个文件放在src目录下即可。

   1: #ifndef CAIRO_FEATURES_H
   2: #define CAIRO_FEATURES_H
   3:  
   4: #define CAIRO_HAS_FC_FONT 0
   5: #define CAIRO_HAS_FT_FONT 0 
   6: #define CAIRO_HAS_IMAGE_SURFACE 1
   7: #define CAIRO_HAS_PDF_SURFACE 1
   8: #define CAIRO_HAS_PNG_FUNCTIONS 1 
   9: #define CAIRO_HAS_PS_SURFACE 1
  10: #define CAIRO_HAS_RECORDING_SURFACE 1
  11: #define CAIRO_HAS_SVG_SURFACE 1
  12: #define CAIRO_HAS_USER_FONT 1 
  13: #define CAIRO_HAS_XLIB_SURFACE 0
  14: #define CAIRO_HAS_XLIB_XRENDER_SURFACE 0
  15: #define CAIRO_HAS_WIN32_SURFACE 1
  16: #define CAIRO_HAS_WIN32_FONT 1
  17:  
  18: #endif // CAIRO_FEATURES_H

     有可能还会遇到其他错误,一种是某些函数链接不了,那么直接添加相关函数,只要保证含义正确即可。另一种是包VC的Runtime冲突什么的,也很简单,打开/src/Makefile.win32文件,在$(CFG)/cairo.dll: $(OBJECTS)一行的下面,加上/NODEFAULTLIB:"MSVCRT.lib",这里MSVCRT提示的冲突库的名称。

      但是,虽然可以这么编。但是,编译出来的cairo.dll会依赖于多个VC动态库。所以,权衡了一下,打算从VC2008中编译,Cario源代码下默认是没有VC工程文件的,因此需要手动创建。

      手动创建好VC2008工程后,编译那些源文件呢。我分析了一下makefile文件,再加上上面的编译结果,至少是可行的。首先,将上面的编译好的obj文件对应的原文件添加到VC中,然后,配置头文件和lib文件所在的目录,第三是设置依赖那些库,这里要注意的是它还依赖于库msimg32.lib,加进去就可以了。最后一步就是配置编译参数,简单的方法是在编译的Command Line中添加如下选项即可:

-nologo -MDd -Od -Zi -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE 

      到这里,基本上就算编译成功了,只要Cairo以及所依赖的库都是自己通过VC编出来的,那么最后的Cario.dll就不会依赖于多个VC运行库。除非,你的依赖VC动态库的参数设置的不一样。

原创粉丝点击