用 Visual C++ 2015 编译 FreeType 2.6.2
2016-07-06 17:36
435 查看
获取源代码
首先,我们下载 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 的动态链接库。
相关文章推荐
- VC++ 中ListCtrl经验总结
- VC++实现程序开机启动运行的方法
- VC++中HTControl控件类的CHTSlider控制杆控件类简介
- VC++中HTControl控制类使用之CHTDlgBase对话框基类实例
- Vc++ 控件List Control用法总结
- MFC控件大小随窗体大小而改变
- VC++的if语句应用范围分析
- VC++在TXT文件指定位置追加内容的方法
- VC++植物大战僵尸中文版修改器实现代码
- CISBitmap派生的VC++位图透明类实例
- VC++创建msi文件的方法
- VC++中图像处理类CBitmap的用法
- VC++的combobox控件用法汇总
- VC++中内存对齐实例教程
- VC++实现通过API来查看程序错误信息的方法
- VC++进度条process Bar的用法实例
- VC++操作SQLite简单实例
- 浅谈VC++中的内联
- VC++实现CStdioFile写入及读取文件并自动换行的方法
- VC++基于Dx实现的截图程序示例代码