编译可在android上运行的依赖库(五):pcre库
作者:寻禹@阿里聚安全
<b></b>
pcre版本:8.38。
本文在ubuntu 64位系统上对pcre项目进行交叉编译。
下文中的"ndk"若无特殊说明均指"android ndk"。
下载并安装android ndk的过程在这里不做介绍。
注意:这里没有也不需要“创建ndk工具的软链接”这个步骤。
cpp=$ndk/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-cpp cxxcpp=$ndk/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-cpp cppflags=<b>"--sysroot $sysroot -i$ndk/sources/cxx-stl/gnu-libstdc++/4.9/include -i$ndk/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi/include -l$ndk/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi/"</b> ./configure --prefix=<b>"${sysroot}/usr" --host=arm-linux-androideabi cflags="--sysroot $sysroot" cxxflags="--sysroot $sysroot" ldflags="-l$ndk/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9/ -l$ndk/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi/ -l$sysroot/usr/lib/" libs="-lgnustl_static"</b>
为了保证交叉编译成功,必须设置cpp、cxxcpp和cppflags这三个宏。下面是从configure.ac文件(该文件在pcre源码中)中提取出来的对这三个宏的解释:
cpp:c preprocessor .................. : ${cpp}
cxxcpp:c++ preprocessor ................ : ${cxxcpp}
cppflags:c preprocessor flags ............ : ${cppflags}
cpp和cxxcpp指向的预处理器均来自ndk。
cppflags除了设置了--sysroot外,还设置了头文件的搜索路径。
ldflags设置了库搜索路径,libs设置了依赖库,这两个宏也必须被设置。
阿里聚安全由阿里巴巴移动安全部出品,面向企业和开发者提供企业安全解决方案,全面覆盖移动安全、数据风控、内容安全、实人认证等维度,并在业界率先提出“以业务为中心的安全”,赋能生态,与行业共享阿里巴巴集团多年沉淀的专业安全能力。