近来学习了一下FreeType库,确实好用。不过遇到很多编译上的问题,发现网络上遇到同样问题的朋友很多,刚好把自己的这点小经验写一下,帮助一下刚开始学习FreeType库的同学。
FreeType 是一个非常好的库,而且跨平台,并且能够自定义组件的方式选择性的编译,所以就特别灵活。但是这灵活也是有代价的,那就是,编译的时候要注意的事情就很多,才接触的时候,往往很不习惯。
FreeType的目录下面,其实已经包含了很多直接可以编译的工程文件和Make文件,我很懒,直接用工程编译。发现win32下面的vc 2005工程能够很好的编译出lib,但是vc 6的却有问题。我用的是2.3.5。
其实,vc6的也是可以的,不过项目文件里面的数据的换行时Unix/Linux下面的换行,vc6这个老IDE不支持,所以,必须你自己手动的改一下换行方式,自己用记事本或者UtralEdit编辑一下吧,好了,现在vc6的可以编译了,但是警告一堆,这些警告是不可忽略的,因为这些问题也会使得编译出来的lib不可使用。
这里的警告是:warning C4273: 'XXXXXXX' : inconsistent dll linkage. dllexport assumed. 意思是dll的链接不一致。这个警告的原因是错误的给函数加上了__declspec(dllimport)修饰,查看头文件后得知,你需要加上 USE_FREETYPE2_STATIC 。然后,编译正确。
还有一个问题程序使用lib时候发生的,编译器提示找不到符号,这些符号多数是 __imp__ 开头,比如__imp__FT_Init_FreeType,一开始实在想不通为什么明明是FT_Init_FreeType,为什么会变成__imp__FT_Init_FreeType。这里的解决办法是要在使用LIB的程序里面加入宏 USE_FREETYPE2_STATIC,编译器就会使用将FreeType的函数当做静态库中的函数使用。
小结一下,在VC6下编译FreeType的静态库的要点
·将工程文件内的换行该成Windows下的换行方式,当然你也可以自己重新建立一个vc6的工程,这里要按照说明添加正确的头文件和源文件(不是所有文件都要加入到工程的).
·编译lib时候,以及使用lib,要使用 USE_FREETYPE2_STATIC 宏
这里有很多名堂的,全部都集中在include/freetype/config目录下面,有空再研究。