unbuntuでskiaをコンパイルする

8920 ワード

一、紹介
      skiaはグーグルのオープンソースベクトルグラフィックエンジンです.Skia社が開発し、グーグルに買収された後、skiaはchrome、chromiumオペレーティングシステム、chromeブラウザ、Androidオペレーティングシステムに応用された.コンパイルするか、テストコードを実行するかを検討します.skiaをできるだけ早くコンパイルできるように、vmwareのubuntu 10.4仮想マシンでコンパイルすることを選びました.
二、コンパイルプロセス及びテストコード
      1.まずskiaソース依存ライブラリ、libfreetype、libpngをインストールします.次のコマンドを使用してインストールできます.
sudo apt-get install libfreetype6-dev
sudo apt-get -f install libpng12-dev

      2.~/でskiaディレクトリを作成し、~/skiaディレクトリに入り、次のコマンドを使用してskiaソースコードをダウンロードします(もちろん、svnツールをインストールしておきます)、checkoutのバージョン番号は624です.
svn checkout http://skia.googlecode.com/svn/trunk/ skia-read-only/

      3.~/skia/skia-read-onlyディレクトリに入り、skiaソースコードを次のコマンドでコンパイルします.コンパイルが完了すると、~/skia/skia-read-only/outディレクトリの下でファイルlibskia.soが生成されます.
make SKIA_BUILD_FOR=linux

      4.~/skia/skia-read-onlyでフォルダmytestを作成し、ファイルtest-skia.cを追加します.内容は以下の通りです.具体的に使用する関数は、その注釈およびskiaドキュメントを参照してください.
   1: /* Simple vector graphics demo utilizing Skia toolkit.
   2:  * Authored by Jim Huang 
   3:  */
   4:  
   5: #include "SkBitmap.h"
   6: #include "SkDevice.h"
   7: #include "SkPaint.h"
   8: #include "SkRect.h"
   9: #include "SkImageEncoder.h"
  10:  
  11: int main()
  12: {
  13:     // Declare a raster bitmap, which has an integer width and height,
  14:     // and a format (config), and a pointer to the actual pixels.
  15:     // Bitmaps can be drawn into a SkCanvas, but they are also used to
  16:     // specify the target of a SkCanvas' drawing operations.
  17:     SkBitmap bitmap;
  18:     bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200);
  19:     bitmap.allocPixels();
  20:  
  21:     // A Canvas encapsulates all of the state about drawing into a
  22:     // device (bitmap).  This includes a reference to the device itself,
  23:     // and a stack of matrix/clip values. For any given draw call (e.g.
  24:     // drawRect), the geometry of the object being drawn is transformed
  25:     // by the concatenation of all the matrices in the stack. The
  26:     // transformed geometry is clipped by the intersection of all of the
  27:     // clips in the stack.
  28:     SkCanvas canvas(new SkDevice(bitmap));
  29:  
  30:     // SkPaint class holds the style and color information about how to
  31:     // draw geometries, text and bitmaps.
  32:     SkPaint paint;
  33:  
  34:     // SkIRect holds four 32 bit integer coordinates for a rectangle.
  35:     SkRect r;
  36:  
  37:     paint.setARGB(255, 255, 0, 0);
  38:     r.set(25, 25, 145, 145);
  39:     canvas.drawRect(r, paint); /** Draw the specified rectangle using
  40:                        the specified paint. The rectangle
  41:                        will be filled or stroked based on
  42:                        the Style in the paint. */
  43:  
  44:     paint.setARGB(255, 0, 255, 0);
  45:     r.offset(20, 20);
  46:     canvas.drawRect(r, paint);
  47:  
  48:     paint.setARGB(255, 0, 0, 255);
  49:     r.offset(20, 20);
  50:     canvas.drawRect(r, paint);
  51:  
  52:     // SkImageEncoder is the base class for encoding compressed images
  53:     // from a specific SkBitmap.
  54:     SkImageEncoder::EncodeFile("snapshot.png", bitmap,
  55:         SkImageEncoder::kPNG_Type,
  56:         /* Quality ranges from 0..100 */ 100);
  57:     return 0;
  58: }

~/skia/skia-read-only/mytestディレクトリの下で、test-skia.cファイルをコンパイルするには、次のコマンドを使用します.
g++ -I../include -I../include/core -I../include/images -I../include/config 
-Wall -o test-skia test-skia.c ../out/src/images/SkImageDecoder_libpng.o 
../out/libskia.a -lpng -lfreetype -lpthread -g

test-skiaを実行するとmytestディレクトリの下でファイルsnapshot.pngが生成されます.
三、まとめ
      Cairoライブラリをコンパイルするときは、Windowsプラットフォームの下で実行したいと思っていました.しかし、実際には、そのプラットフォームのコンパイルが便利なのはそのプラットフォームです.私たちの目的はコンパイルのためにコンパイルするのではなく、コンパイルするライブラリ自体を理解することです.skia機能の簡単な紹介については、ここを参照してください.
四、参考資料
      1.linuxでskiaをコンパイルする