问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何编译qtfreetype.lib

发布网友 发布时间:2022-04-22 16:44

我来回答

3个回答

懂视网 时间:2022-04-12 03:02

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

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

热心网友 时间:2022-04-12 00:10

libfreetype是为跨平台设计的。
在windows下要编译的话,可以直接打开freetype-2.4.10buildswin32vc2008目录下的freetype.sln进行编译。
有时候我们只希望对特定字体做简单的事情,则我们可以对libfreetype进行裁剪。
裁剪的方式有两种:
1,对于GNU make需要修改moles.cfg
2,对于其他编译器,比如vs2008则需要修改ftmole.h
如果我们只想处理truetype的字体文件,则可以只保留sfnt_mole_class和tt_driver_class这两个mole。
详细信息可以参见:freetype-2.4.10docsCUSTOMIZE和freetype-2.4.10docsINSTALL.ANY
裁剪之后,最终可执行程序的大小可以从350KB减少到100KB,还是很明显的。

热心网友 时间:2022-04-12 01:28

应该下载freetype-xxx.tar.bz2,而不能使用ftxxx.zip文件,然后用./configure && make apt-get install libfreetype6-dev 或者 yum install freetype-devel.x86_64
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
山东沃尔德集团集团所辖公司介绍 齐鲁银行无忧贷和市民贷哪个好 什么叫补按揭 后按揭贷款什么意思 买房者续按揭有什么危害 加按揭是什么意思 八月中国最凉快的地方 八月份哪里最凉快,去哪旅游好?美丽的地方 乱字同韵字是什么意思 华硕笔记本电脑触摸板怎么开笔记本电脑触摸板怎么开启和关闭_百度知 ... 画漫画是用什么笔,不是2B铅笔吧,有图吗? 枝江副市长张凯个人资料 我要找豆花的文 青年企业家张凯是不是很出名? 张凯的人物简介 三国演义的张凯是什么样的人物角色 张凯的经历 京剧演员窦晓璇和京剧演员张凯是夫妻吗? 张凯律师疫苗文章爆红收140万打赏后做了什么? 张凯的社会任职 谁能简单介绍一下青年企业家张凯? 张凯的简要介绍 张凯的介绍 张凯的国籍 张凯的简介 张凯的个人简历 张凯的资料 广州TTG张凯年龄 张凯是谁? 青年企业家张凯是怎么样的一个人? 详细介绍下迈阿密这个城市 qt怎么自动选择配置的define参数 我国古代有哪些书法家 Qt 软件中怎么自动加入build版本号 硪国有那些著名的书法家? 怎么在Qt中用linux下安装都库 路由器和交换机区别在那啊?详细的讲解! QT5静态编译无法加载数据库插件 如何在Windows下构建ARM Linux QT开发环境 qt移植到s3c2440开发板上,出现too short的问题 丢失QtGui4.dall 网上下载的没用 我家WIN7 64位的 ubuntu下怎么安装qt creator-CSDN论坛 如何在ubuntu中安装qt程序 怎样在ubuntu下安装Qt开发环境 安装qt creator的环境 win7系统下Qt编译出错的解决方法 安装QT环境遇到这种情况怎么破 ubuntu 下的QT编程例子 visual stdio2008 安装qt库 链接时出现一个undefined reference to 问题,实在不懂为什么