1 Crypto++不支持CMake编译

Crypto官网:https://www.cryptopp.com/

Crypto++ github:https://github.com/weidai11/cryptopp

从Crypto++官网或者github下载的发布包本身是不支持CMake编译的,里面就没有CMakeLists.txt文件,不过github中这个仓库:https://github.com/abdes/cryptopp-cmake 提供了Crypto++8.7 - 8.9版本的CMake编译支持,如果需要更老的版本也可以看这个仓库:https://github.com/noloader/cryptopp-cmake,这个仓库提供了到Crypto++8.6的CMake编译支持。

本篇文章以https://github.com/abdes/cryptopp-cmake的写本文最新的Crypto++8.9如何在Windows上交叉编译Android库为例进行说明。

2 Windows上交叉编译Crypto++ Android库

2.1 拉取cryptopp-cmake最新仓库或者下载cryptopp-cmake最新的发布包

你可以使用git clone拉取cryptopp-cmake的最新仓库或者在它的Release下载最新的发布包,这里以8.9版本为例。

下载完成之后解压缩文件夹。

2.2 交叉编译Crypto++ Android库

假设你已经准备好windows上交叉编译Android项目的环境:

  • Android SDK
  • Android NDk
  • CMake
  • Ninja

然后在解压缩的文件根目录cryptopp-cmake-CRYPTOPP_8_9_0下新建一个名为build_android.bat的windows批处理文件,在文件中新增以下内容

@REM abi=armeabi armeabi-v7a arm64-v8a mips mips64 x86 x86_64
set abi=arm64-v8a
set ANDROID_SDK_HOME=F:/Software/Android/AndroidSDK/SDK
set ANDROID_NDK_HOME=F:/Software/Android/AndroidSDK/SDK/ndk/25.1.8937393
set ANDROID_SDK_CMAKE=%ANDROID_SDK_HOME%/cmake/3.22.1
set ANDROID_NATIVE_API_LEVEL=19
set ANDROID_PLATFORM=android-29
set BUILD_TYPE=Release
set GENERATOR="Ninja"

if not exist build md build
cd build

@REM build armeabi-v7a
if not exist %abi% md %abi%
cd %abi%

%ANDROID_SDK_CMAKE%/bin/cmake ^
  -DANDROID_ABI=%abi% ^
  -DANDROID_NDK=%ANDROID_NDK_HOME% ^
  -DCMAKE_BUILD_TYPE=%BUILD_TYPE% ^
  -DCMAKE_TOOLCHAIN_FILE=%ANDROID_NDK_HOME%/build/cmake/android.toolchain.cmake ^
  -DANDROID_PLATFORM=%ANDROID_PLATFORM% ^
  -DANDROID_NATIVE_API_LEVEL=%ANDROID_NATIVE_API_LEVEL% ^
  -DANDROID_TOOLCHAIN=clang ^
  -DCMAKE_GENERATOR=%GENERATOR% ^
  -DCMAKE_MAKE_PROGRAM=%ANDROID_SDK_CMAKE%/bin/ninja ^
  -DCRYPTOPP_BUILD_TESTING=FALSE ^
  ../../

%ANDROID_SDK_CMAKE%/bin/ninja

cd ../../

然后在命令行工具运行批处理文件,或者直接点击进行运行,等待编译完成。

2.3 库输出目录

编译成功之后,库路径为:cryptopp-cmake-CRYPTOPP_8_9_0\build\arm64-v8a\cryptopp\libcryptopp.a