windows下編譯Cairo圖形庫1.10.2

      上週寫一個遊戲(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動態庫的參數設置的不一樣。

發佈了86 篇原創文章 · 獲贊 10 · 訪問量 43萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章