0

0

win32下FreeType2的编译

php中文网

php中文网

发布时间:2016-06-07 15:30:39

|

1827人浏览过

|

来源于php中文网

原创

其实网络上已经有很多关于这方面的知识了,这篇文章的目的也只在于加深印象,积累经验,有人告诉我,写文章对自己也是一种很好的帮助。希望这篇文章对其它人也有一点帮助,由于文笔水平不好,表述不清楚之与错误之处,还请见详。 关于FreeType2L的介绍我不多


 其实网络上已经有很多关于这方面的知识了,这篇文章的目的也只在于加深印象,积累经验,有人告诉我,写文章对自己也是一种很好的帮助。希望这篇文章对其它人也有一点帮助,由于文笔水平不好,表述不清楚之与错误之处,还请见详。
关于freetype2l的介绍我不多说了,网上的文章还是比较多的。还有,本文只介绍我的安装经历,不对freetype2库的使用做介绍,如有需要,大家自己看参考手册。

开篇:

从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

ecshop
ecshop

本版本全面兼容php5.6+,并且修复了许多官方程序的低级代码bug。在apache 2.4.17+php5.6.15环境下测试通过,人格保证无毒无木马,仅仅是一名ecshop热爱者心血来潮之作。ecshop编译更新日志:1、加入最新官方补丁。2、修改数据库连接底层为mysqli, 现在完美无缺了。3、再次对所有代码进行细节修复。4、adminers更新至1.1.2, 在线管理数据库的神器。5、测

下载

编译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动态链接到本库中。因此,使用本库的项目也要使用相应的线程库。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

2

2026.01.29

java配置环境变量教程合集
java配置环境变量教程合集

本专题整合了java配置环境变量设置、步骤、安装jdk、避免冲突等等相关内容,阅读专题下面的文章了解更多详细操作。

2

2026.01.29

java成品学习网站推荐大全
java成品学习网站推荐大全

本专题整合了java成品网站、在线成品网站源码、源码入口等等相关内容,阅读专题下面的文章了解更多详细推荐内容。

0

2026.01.29

Java字符串处理使用教程合集
Java字符串处理使用教程合集

本专题整合了Java字符串截取、处理、使用、实战等等教程内容,阅读专题下面的文章了解详细操作教程。

0

2026.01.29

Java空对象相关教程合集
Java空对象相关教程合集

本专题整合了Java空对象相关教程,阅读专题下面的文章了解更多详细内容。

3

2026.01.29

clawdbot ai使用教程 保姆级clawdbot部署安装手册
clawdbot ai使用教程 保姆级clawdbot部署安装手册

Clawdbot是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

25

2026.01.29

clawdbot龙虾机器人官网入口 clawdbot ai官方网站地址
clawdbot龙虾机器人官网入口 clawdbot ai官方网站地址

clawdbot龙虾机器人官网入口:https://clawd.bot/,clawdbot ai是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

16

2026.01.29

Golang 网络安全与加密实战
Golang 网络安全与加密实战

本专题系统讲解 Golang 在网络安全与加密技术中的应用,包括对称加密与非对称加密(AES、RSA)、哈希与数字签名、JWT身份认证、SSL/TLS 安全通信、常见网络攻击防范(如SQL注入、XSS、CSRF)及其防护措施。通过实战案例,帮助学习者掌握 如何使用 Go 语言保障网络通信的安全性,保护用户数据与隐私。

8

2026.01.29

俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

622

2026.01.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Rust 教程
Rust 教程

共28课时 | 5万人学习

Kotlin 教程
Kotlin 教程

共23课时 | 3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号