bithulu's blog

Posted Sun, 26 Nov 2017

Android NDK中使用预编译头文件

使用预编译头(Precompiled Header,简称PCH)可以加快c/c++代码编译。

那么Android NDK编译native代码时,如何开启PCH?请客官往下看!

** 特别说明:** 我使用的 NDK r13b,较低版本的NDK可能不支持,具体是哪个版本开始,我没深究。

方法步骤

创建 prefix.h

pch 头文件定义,不一定是"prefix.h",可以自定。

把你项目中公共使用的不常修改的标准库、第三方库等头文件放入 prefix.h

#ifndef __PCH_HEADER
#define __PCH_HEADER

#include <memory>
#include <list>
#include ...

#endif //!__PCH_HEADER

prefix.h不需要在你项目的 .h .cpp等中include, NDK在编译时,为当前启用pch的模块所有源代码最前面自动加上这个头文件。

修改 Android.mk

Android.mk需要开启PCH的模块中加入 pch 头文件定义,不同模块可以分开定义。

LOCAL_PCH := $(YOUR_PCH_FILE_DIR)/prefix.h

进行编译

正常使用ndk-build,就可以启用到PCH了,就这么简单。 你可以看到会先编译prefix.h成PCH文件,再编译其他源代码。

你可以在obj里面找到含有 precompiled 的一个文件。

存在的问题

目前GCC的PCH文件(预编译后的头文件,不是上面所举的prefix.h)不能超过128MB,不然编译时cc1plus会crash。

使用clang没有这个问题,貌似google也不打算解决gcc的限制问题,而是建议切换到clang。毕竟GCC已被Google打入冷宫。

如果你必须使用gcc,那么当PCH文件超过128MB时,可以适当减少 pch.h 里面的头文件,让PCH文件小于128MB。

Category: 开发
Tags: android ndk pch makefile