windows下编译Cairo图形库1.10.2

    技术2024-04-16  12

          上周写一个游戏(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动态库的参数设置的不一样。

    最新回复(0)