用 Visual C++ 2015 编译 FreeType 2.6.2
来源:互联网 发布:mac系统好玩的枪战游戏 编辑:程序博客网 时间:2024/05/29 13:10
获取源代码
首先,我们下载 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 的动态链接库。
- 用 Visual C++ 2015 编译 FreeType 2.6.2
- 交叉编译freetype 2.6.2,个人实际操作
- freetype visual c++ 6.0 编译问题
- 用Visual Studio 2015编译JNI C++/C 代码
- ubuntu9.10 编译freetype
- 编译 freetype 成 dll
- FreeType编译及使用
- 7、交叉编译freetype
- FreeType编译及使用
- vs2008编译freetype
- freetype 交叉编译
- FreeType 源码编译
- 交叉编译freetype
- Ubuntu上编译安装Freetype/Freetype-py
- Visual Studio 2012 编译C
- freetype-1.3.1 交叉编译
- psplibraries编译freetype出错解决方法
- FreeType编译及使用心得
- Java并发包:双端阻塞队列(BlockingDeque)
- LPTSTR、LPCSTR、LPCTSTR、LPSTR的来源及意义
- Class文件结构
- 从0开始写一个高性能epoll网络库
- mysql单表自关联查询
- 用 Visual C++ 2015 编译 FreeType 2.6.2
- oracle dg主从切换
- 25个Java机器学习工具&库
- Spring常用注解
- 为什么要用Android Studio?
- 罪人审判
- leetcode.371. Sum of Two Integers
- SQL Server复制入门(一)----复制简介
- python实现根据两点经纬度计算实际距离