用 Visual C++ 2015 编译 FreeType 2.6.2

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/XinYaping/article/details/51841039

获取源代码

首先,我们下载 FreeType 的源代码。从 sourceforge 上获得 FreeType 的最新稳定版本(当前是 2.6.2)。

Notes: 当前 FreeType 的最新版本是 2.6.3,但 2.6.3 这个版本我尝试编译了一下,有 3 个无法解决的编译错误。而 2.6.2 编译就很顺利。所以现在我们暂时还是不要用 2.6.3 了。

解压之后,把 freetype-2.6.2 这个目录拷贝到这个目录下:C:\Lib\FreeType

Notes:
[1] 如果你电脑上并不存在这个目录,你至少要知道自己创建它。
[2] 你当然可以用和我不一样的路径,注意:在后面的步骤中如果涉及到这个路径,你自行替换成你自己所用的路径。

这里写图片描述

然后,在系统变量中,增加:FreeType := C:\Lib\FreeType\freetype-2.6.2
看了以下截图你就应该明白我的意思:
这里写图片描述

这么做的好处是:
1. 以后当我们需要用到 C:\Lib\FreeType\freetype-2.6.2 这个路径的时候,可以用 %FreeType% 或者 $(FreeType) 来代替它;
2. 如果我们以后更换了 FreeType 的版本,只需要更新 FreeType 系统变量,就可以用 %FreeType% 或者 $(FreeType) 来指向最新版本的路径了。

这里写图片描述

这里写图片描述

用 Visual C++ 2015 编译 FreeType

准备工作

现在我们看:
1. 在 %FreeType%\objs 这个目录下,只有一个 README 文件。一会儿我们编译的结果将会输出到这个目录。
这里写图片描述
2. 在 %FreeType%\builds\windows 这个目录下,我们能看到 visualc(这是给 VC6 用的)、vc2005、vc2008、vc2010,就是没有 vs2015。我们直接把 vs2010 复制出一份来,重命名成 vs2015。^–^
这里写图片描述

然后,在 %FreeType%\builds\windows\vs2015 中,用 Visual Studio 2015 打开 freetype.sln

这时,当然在预料之中我们会看到 Upgrade VC++ Compiler and Libraries 这个对话框,点 OK 就好了。
这里写图片描述

Character Set

然后,在 freetype 这个 project 上点鼠标右键打开 Property Pages
这里写图片描述

我们看到,在 Configuration Properties | General 中,Output Directory 和 Intermediate Directory 路径里面还保留着 vs2010 的字样,这肯定有点不爽啦。我们把 vs2010 改成 MSVC 吧。注意修改的时候,Configuration 下拉框确保要选中 All Configutations,Platform 下拉框确保要选中 All Platforms。

Notes: 为什么改成 MSVC 呢?是为了跟 FreeType for Windows Binary Download 下载得到的文件路径保持一致。

这里写图片描述

然后,看 Character Set 这一项,它原来的选项是 Use Multi-Byte Character Set ,也就是 MBCS。MBCS 的存在是为了兼容 Windows NT、Windows 98、Windows 2000 那些老古董,微软强烈建议我们在新项目中能用 Unicode 就尽量用 Unicode。

所以我们当然顺应历史潮流把它改成 Use Unicode Character Set:

这里写图片描述

编译成动态链接库

然后,看 Configuration Type 这一项:它原来的选项是 Static library (.lib),其实像这种公共的库我们最好使用动态链接库。我们把它改成 Dynamic Library (.dll)

这里写图片描述

但是这样还不算完,如果你就是这个样子去编译的话,你会发现,动态链接库(DLLs)倒是能得到,但没有LIB。这样的话你就只能在程序中显式地调用动态链接库,但没办法隐式地调用动态链接库,因为隐式地调用动态链接库的时候需要LIB。

要想得到LIB,需要这样做:
修改 %FreeType%/include/freetype/config/ftconfig.h

找到这一段(第 387 行):

#ifndef FT_EXPORT

#ifdef __cplusplus
#define FT_EXPORT( x )  extern "C"  x
#else
#define FT_EXPORT( x )  extern  x
#endif

#endif /* !FT_EXPORT */

把它改为:

#ifdef DLL_EXPORT
#undef DLL_EXPORT
#define DLL_EXPORT  __declspec(dllexport)
#else
#define DLL_EXPORT  __declspec(dllimport)
#endif /* !DLL_EXPORT */


#ifndef FT_EXPORT

#ifdef __cplusplus
#define FT_EXPORT( x )  extern "C"  DLL_EXPORT  x
#else
#define FT_EXPORT( x )  extern  DLL_EXPORT  x
#endif

#endif /* !FT_EXPORT */

其实改动并不多。我们看看改动后的 Diff 就知道到底改了哪些内容了:
这里写图片描述

编译结果

然后,点击 Visual Studio 2015 的菜单 Build | Batch Build,Select All 然后 Build / Rebuild。
这里写图片描述

编译很顺利,在 %FreeType%\objs\MSVC 目录下的到了我们想要的 FreeType 2.6.2 的动态链接库。
这里写图片描述

猜你喜欢

转载自blog.csdn.net/XinYaping/article/details/51841039