http://www.freetype.org下载源代码。

FreeType2库源码包中包含多种环境与编译器下的make文件,其中还包含vc的项目文件。

我用的是VC,所以首先找到VC环境的项目文件。该文件在 /builder/win32/visualc目录下面,该目录包含vc6与vs2005的项目文件。不过好像它的vc6版本的项目文件有点问题,我用vc6是不能正确打开的,不过vs2005可以很好的工作。打开vs2005的项目进行编译就可以了,没有错误的放就会在/objs目录下产生相应的lib静态库文件。以上过程是通常的方法。

但是现在遇到一个问题是,因为官方所给的项目文件只能产生静态链接库文件(LIB),如果你想产生动态链接库(DLL)文件的话,那你就得自己想办法了。我的的重点也在于讲如何编译成DLL文件。

我的工作环境是VC6,但由于官方给出的vc6文件是有问题,我也懒得去看到底是什么问题了,所以我倾向于重建自己的项目文件。

解决:

Freetype2是一个高度可定制化的库,而FreeType2包内的文档也足够让我做到我想做的事情。

第一步:

我参考的第一个文档是/doc目录下的INSTALL.ANY。该文档其实已经把标准编译所要包含的文件及它们的作用说得很清楚了,那我现在要做的就是新建一个vc6 win32DLL工程,选择empty工程选项,产生一个空dll工程了,然后按照INSTALL.ANY的说明把需要加入的文件加入工程内,INSTALL.ANY文件内有一很明显的提醒:“DO NOT COMPILE ALL C FILES!”,就是不要编译所有的C文件,这点应该注意。

第二步:

第二个参照和修改的文件是ftoption.h,该文件在/include/freetype/config目录下,该目录主要存放一些配置头文件。ftoption.h文件里对每一可定制项目都有很详细的解释,而且还给出了使用ftoption.h配置FreeType2库的三种手段。那我用的方法不知道是不是其中之一:

一、首先备份一下ftoption.h,如,另存为ftoption_bak.h文件。

二、根据ftoption.h在"DLL export compilation"项里的描述,FreeType2库在需要导出的函数前都使用了FT_EXPORT(用在函数定义处),FT_EXPORT_DEF(用在函数声明处)两个宏,因此我只需要重新定义这两个宏就OK了。FreeType2库对于FT_EXPORT和FT_EXPORT_DEF宏的缺省定义在ftconfig.h文件中。

我的做法是,在ftopion.h的该处重新定义自己的FT_EXPORT和FT_EXPORT_DEF,如下所示:

#ifdef FT2_DLL    //因为在静态库与动态中都使用该文件,所以区别使用该指示字,使用FT2_DLL表示要编译为DLL动态库。

 #ifdef FT2_EXPORTS  //按照微软的标准做法,定义__declspec(dllexport)与__declspec(dllimport)

  #define FT_EXPORT( x )  __declspec(dllexport) x

  #define FT_EXPORT_DEF( x )  x

 #else     //按照微软的说法,其它__declspec(dllimport)也可以不要的,但这样做更有效率并且如果不这么做时,在导出变量时有时会出现问题,so!照他说的做吧。

  #define FT_EXPORT( x )  __declspec(dllimport) x

  #define FT_EXPORT_DEF( x ) x

 #endif

#endif

编译DLL需要做的就已经完成了,另还要需要注意的是:因为是重建的项目文件,所以参照官方项目文件,在ftoption.h中的"Debug level "项修改如下:

#ifdef _DEBUG

 #define FT_DEBUG_LEVEL_ERROR 

 #define FT_DEBUG_LEVEL_TRACE 

 #endif

三、在vc6项目文件中需要定义FT_DLL(我们在前面定义的),FT_EXPORT(我们在前面定义的),FT2_BUILD_LIBRARY(编译成库文件所需要的)预定义标志。然后再按常规DLL的方法定义输出目录,其它预编译指令之类,就可以生成DLL文件了,注:同时还会生成.LIB和.EXP文件。

四、我们也可以按照同样的方法新建一个空win32静态链接库项目,但预定义标志与Freetype2为相关只需要FT2_BUILD_LIBRARY(编译成库文件所需要)预定义标志。

五、建一个空工程文件包含这两个项目文件,最后一步就OK了。

FreeType2是一个灵活,可定制性高及性能很不错的库,关于更多的定制,比如模块的选择,系统接口的定制,可以参照它的安装文档,文档里都有说明。

另1:可以顺便提一下FTGL库,这个一个基于利用FreeType实现在OpenGL下字体绘制的库,因为作者没有考虑(或解决)FreeType动态库的问题,所以只包含使用FreeType2静态库的的项目文件,用FTGL库的朋友也可以根据以下思路进行更改,重建自己的项目文件。

另2:关于vc DLL使用的三种线程库:原官方FreeType2的vc项目文件的六个配置分别对应于发布和调试版本的三种线程库。单线程:指的将LIBC.lib静态链接到本库中,多线程:指的将LIBCMT.lib静态链接到本库中,多线程DLL:指的是将MSVCRT.dll动态链接到本库中。因此,使用本库的项目也要使用相应的线程库。

转载自:http://blog.csdn.net/alexander0514/article/details/1804007

MFC编译Freetype2.3.7的更多相关文章

  1. freeType移植总结①——使用keil编译freeType2库

    在各个技术博客搜索相关资料后,终于将freeType的源码用keil工程编译通过,这里记录一下步骤和遇到的问题. 因为网上的资料都是旧版本freeType的工程,这里博主使用的是freeType2.9 ...

  2. linux下编译qt5.6.0静态库——configure配置

    linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberr ...

  3. linux下编译qt5.6.0静态库——configure配置(超详细,有每一个模块的说明)(乌合之众)

    linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberr ...

  4. linux下编译qt5.6.0静态库(使用./configure --help来看看都有哪些参数。超详细,有每一个模块的说明。如果改变了安装的目录,需要到安装目录下的bin目录下创建文件qt.conf)(乌合之众)good

    linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberr ...

  5. "The Application was unable to start correctly (0xc000007b). Click OK to close the application"

    我有时将MFC编译成64位并运行,就会报这个错误. 后来查找原因,就在于系统中使用了错误的dll.比如这个程序要使用64位的dll,而你拷贝进去的是同名的32位dll.解决方法就是放置正确的dll. ...

  6. 百度地图API开发

    1.首先申请百度地图秘钥 http://lbsyun.baidu.com/ 2.需要填一个申请的界面 3.申请后会有类似的东西 4.之后参照以下网址进行MFC编译 mfc webbrowser控件使用 ...

  7. 基于USB3.0的双目相机测试小结之CC1605配合CS5642 双目 500w摄像头

    基于USB3.0的双目相机测试小结之CC1605配合CS5642  双目 500w摄像头 CC1605双目相机评估板可以配合使用柴草电子绝大多数摄像头应用 如:OV5640.OV5642.MT9P03 ...

  8. cmake用法及常用命令总结(全)

    CMakeLists.txt 的语法比较简单,由命令.注释和空格组成,其中命令是不区分大小写的.指令是大小写无关的,参数和变量是大小写相关的.但推荐全部使用大写指令.符号 # 后面的内容被认为是注释. ...

  9. xmake v2.2.2, 让C/C++拥有包依赖自动构建

    前言 历经四个多月,xmake终于更新了新版本v2.2.2,并且上线了重量级功能:原生支持的远程依赖包管理. 而这个特性,其实我陆陆续续写了将近一年的时间,才初步完成,对于此特性的开发进展和历史,有兴 ...

随机推荐

  1. FaceNet pre-trained模型以及FaceNet源码使用方法和讲解

    Pre-trained models Model name LFW accuracy Training dataset Architecture 20180408-102900 0.9905 CASI ...

  2. python_django_models模块中的查询

    查询集:表示从数据库获取的对象集合,查询集可以有多个过滤器,过滤器就是一个函数(方法),基于所给参数限制查询集结果 从sql角度来说,查询集和select等价,过滤器和where等价 查询集特点: 惰 ...

  3. CSIC_716_20191029【人脸打分系统】

    今日内容: 1.调用百度的AI接口,完成人脸图像打分( 敷衍) 2.完成系统内置时间的打印 3.将上述两段代码生成可执行文件 ------------------------------------- ...

  4. python 基本常用数据类型

    #字典类型 result={1:2222,2:2221111}; result.items();#获取字典中所有元素 result.keys();#获取字典的key result.values();# ...

  5. 校园商铺-2项目设计和框架搭建-10验证controller

    1.新建package:com.csj2018.o2o.web.superadmin 2.建立AreaController.java package com.csj2018.o2o.web.super ...

  6. php获取本周、本月、本年的时间段

    这是在TP框架里面自己用到的一个获取周.月.年时间段的方法.

  7. 概率+后效性处理——cf930B好题

    之前题目看错了.. 先用双倍字符串处理后效性 首先要确定一个结论:如果原串s中相距为d的ch1和ch2只有一对,那么如果第一个翻开ch1,第二个翻开ch2,就能确定k 现在要求的是当我们第一次翻开的是 ...

  8. VC++ COMBO BOX控件的使用

    1.你在编辑状态下点那个控件的向下的三角形,就出冒出来一个可以调高度的东东.将高度调高,否则在执行时会不能显示下拉选项.   2.为combo box添加选项,在编辑状态下选combo box控件的属 ...

  9. win7防火墙里开启端口的图文教程 + SNMP测试感触

    转:http://www.cnblogs.com/vipsoft/archive/2012/05/02/2478847.html 开启端口:打开“控制面板”中的“Windows防火墙”,点击左侧的“高 ...

  10. HTML5: 实现调用系统拍照或者选择照片并预览

    ylbtech-HTML5: 实现调用系统拍照或者选择照片并预览 1.返回顶部 1. <!DOCTYPE html> <html> <head> <meta ...