在Xcode中编译FreeType和FTGL库

跨平台的OpenGL程序如果要实现平滑字体显示,就必须利用FreeType2和FTGL库,这些库在Windows很容易配置,但是在mac下就有些麻烦,特别是在Xcode下开发Cocoa类程序时更是如此。这些库的源代码都有一些Makefile,在Mac下虽然能用但是它是针对Unix X11的,直接载入到Xcode会提示“is not required of architecture”。因此好的办法就是用Xcode进行编译成static library。我试了好长时间总算能用了。

我们一共要编译两个static library,一个是libFreetype.a,一个是libFTGL.a。

先下载FreeType库:http://www.freetype.org

FTGL库:http://sourceforge.net/projects/ftgl/

首先编译FreeType库

在源代码的docs中有一个INSTALL.ANY文件,用文本编辑器打开。我摘录了这几行:

* DO NOT COMPILE ALL C FILES!  Rather, compile the following ones.

-- base components (required)

 

      src/base/ftsystem.c

      src/base/ftinit.c

      src/base/ftdebug.c

 

      src/base/ftbase.c

 

      src/base/ftbbox.c       -- recommended, see <freetype/ftbbox.h>

      src/base/ftglyph.c      -- recommended, see <freetype/ftglyph.h>

 

      src/base/ftbdf.c        -- optional, see <freetype/ftbdf.h>

      src/base/ftbitmap.c     -- optional, see <freetype/ftbitmap.h>

      src/base/ftcid.c        -- optional, see <freetype/ftcid.h>

      src/base/ftfstype.c     -- optional

      src/base/ftgasp.c       -- optional, see <freetype/ftgasp.h>

      src/base/ftgxval.c      -- optional, see <freetype/ftgxval.h>

      src/base/ftlcdfil.c     -- optional, see <freetype/ftlcdfil.h>

      src/base/ftmm.c         -- optional, see <freetype/ftmm.h>

      src/base/ftotval.c      -- optional, see <freetype/ftotval.h>

      src/base/ftpatent.c     -- optional

      src/base/ftpfr.c        -- optional, see <freetype/ftpfr.h>

      src/base/ftstroke.c     -- optional, see <freetype/ftstroke.h>

      src/base/ftsynth.c      -- optional, see <freetype/ftsynth.h>

      src/base/fttype1.c      -- optional, see <freetype/t1tables.h>

      src/base/ftwinfnt.c     -- optional, see <freetype/ftwinfnt.h>

      src/base/ftxf86.c       -- optional, see <freetype/ftxf86.h>

 

      src/base/ftmac.c        -- only on the Macintosh

 

    -- font drivers (optional; at least one is needed)

 

      src/bdf/bdf.c           -- BDF font driver

      src/cff/cff.c           -- CFF/OpenType font driver

      src/cid/type1cid.c      -- Type 1 CID-keyed font driver

      src/pcf/pcf.c           -- PCF font driver

      src/pfr/pfr.c           -- PFR/TrueDoc font driver

      src/sfnt/sfnt.c         -- SFNT files support

                                 (TrueType & OpenType)

      src/truetype/truetype.c -- TrueType font driver

      src/type1/type1.c       -- Type 1 font driver

      src/type42/type42.c     -- Type 42 font driver

      src/winfonts/winfnt.c   -- Windows FONT / FNT font driver

 

    -- rasterizers (optional; at least one is needed for vector

       formats)

 

      src/raster/raster.c     -- monochrome rasterizer

      src/smooth/smooth.c     -- anti-aliasing rasterizer

 

    -- auxiliary modules (optional)

 

      src/autofit/autofit.c   -- auto hinting module

      src/cache/ftcache.c     -- cache sub-system (in beta)

      src/gzip/ftgzip.c       -- support for compressed fonts (.gz)

      src/lzw/ftlzw.c         -- support for compressed fonts (.Z)

      src/gxvalid/gxvalid.c   -- TrueTypeGX/AAT table validation

      src/otvalid/otvalid.c   -- OpenType table validation

      src/psaux/psaux.c       -- PostScript Type 1 parsing

      src/pshinter/pshinter.c -- PS hinting module

      src/psnames/psnames.c   -- PostScript glyph names support

 

 

    Notes:

 

      `ftcache.c'  needs `ftglyph.c'

      `ftfstype.c' needs `fttype1.c'

      `ftglyph.c'  needs `ftbitmap.c'

      `ftstroke.c' needs `ftglyph.c'

      `ftsynth.c'  needs `ftbitmap.c'

 

      `cff.c'      needs `sfnt.c', `pshinter.c', and `psnames.c'

      `truetype.c' needs `sfnt.c' and `psnames.c'

      `type1.c'    needs `psaux.c' `pshinter.c', and `psnames.c'

      `type1cid.c' needs `psaux.c', `pshinter.c', and `psnames.c'

      `type42.c'   needs `truetype.c'

这里的意思是,有些c文件不须编译因为它们被包括到其他c文件中了。

新建一个xcode static library 工程, 如图:


把源代码中的include和src拷贝到xcode工程下,如图:


然后添加到管理器。

注意这里要删去部分源代码文件,就是INSTALL.ANY中没有提到的那些,但注意是delete references不是move to trash!那个ftmac.c最好也删去,我们不需要管它和mac的关系。

双击你的target在build中找到preprocessor macro,加入FT2_BUILD_LIBRARY


在build中找到header search path,加入“include/” (注意无引号,即我们复制进工程的头文件所在)


在源代码文件的ftobjs.c和ftbase.c中的

#if !defined( FT_MACINTOSH ) || defined( DARWIN_NO_CARBON )

#endif  /* defined( FT_MACINTOSH ) && !defined( DARWIN_NO_CARBON ) */

两行注释掉。

这时点击build应该就能出来一个libFreeTypeStaticLib.a的文件了。

同理新建一个FTGLStaticLib工程,把FTGL的src文件夹和config.h文件复制进工程,把FreeType的include文件夹复制进工程,把前面得到的libFreeTypeStaticLib.a复制进工程。

在header search path中加入“src/”和“include/”

点击build就能出来另一个.a文件。

想测试一下的话新建一个command line tool c++工程,把得到的两个.a文件拖入,把FreeType的include文件夹和FTGL中的FTGL文件夹(里面都是头文件)拖入,把FTGL中demo文件夹的c-demo.c,trackball.c,trackball.h,tb.c,tb.h拖入,加入OpenGL 和 GLUT FrameWork。


(在c-demo.c,trackball.c和tb.c中把

#if defined HAVE_GL_GLUT_H

#   include <GL/glut.h>

#elif defined HAVE_GLUT_GLUT_H

#   include <GLUT/glut.h>

#else

#   error GLUT headers not present

#endif

注释掉并加入#include <GLUT/GLUT.h>)

运行成功的画面:

 

 

http://hi.baidu.com/georgemonster/blog/item/8712853e785b2bf6838b1321.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值