Windows 平台交叉编译 Openssl 到 Android

稍微记录下吧。

所需工具:

  • Android NDK
  • MSYS2

NDK

首先 NDK 肯定是要的,有两种 NDK。

第一种是通过 sdkmanager 安装的 NDK,安装路径一般在 Sdk/ndk/<ver> 这种。

第二种是直接单独下载的 NDK,目录名字一般是 android-ndk-r25 这种。

两种没区别,只不过是路径上的问题。

MSYS2

作为一个能偷懒就偷懒的人来说,能不使用 MSYS2 就能完成编译是最好不过的,然而事实上因为 perl 的问题,还是得借助 MSYS2。

openssl 的配置脚本是用 perl 写的,里面用正则的方式去匹配 NDK 路径。总所周知,Windows 平台的路径分隔符是反斜线 \,而 Linux 等平台的是 /。Windows 上的 perl 返回的路径里面是 /,而且还有 DOS 8.3 短文件名的问题,总之就是没办法通过匹配,找到正确的编译器。

折腾了半天,尝试修改脚本,最后放弃了。

安装好 MSYS2 后已经自带了 perl,但是没有自带 make,需要自己装一下

pacman -Sy make

然后就没有然后了。

编译

先进入 MSYS2 的环境。

第一步首先设置 NDK 的路径,如果是要编译 openssl 3.0 之前的版本,需要设置的环境变量是 ANDROID_NDK_HOME

export ANDROID_NDK_HOME=/<ndk path>

ndk 的路径就是最上面提到的,通过 sdkmanager 安装的版本路径是包含具体版本号的,例如 22.1.7171670 这种,例如

export ANDROID_NDK_HOME=/c/Users/xxx/AppData/Local/Android/Sdk/ndk/22.1.7171670

如果是单独下载的 NDK,路径直接就是解压出来的就行。

如果编译的是 3.0 的版本,环境变量名字改成了 ANDROID_NDK_ROOT,其他的都是一样的。

第二步设置 PATH,让 Configure 脚本能够找到编译器的位置。

export PATH=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/windows-x86_64/bin:$PATH

或者根据版本的不同是

export PATH=$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/windows-x86_64/bin:$PATH

然后就可以运行配置脚本了。

perl ./Configure android-arm64

默认选用最高 SDK 版本,也可以自己手动指定,-D__ANDROID_API__=24

perl ./Configure android-arm64 -D__ANDROID_API__=24

后面的是目标平台,可选值反正就是

  • android-arm
  • android-arm64
  • android-armeabi
  • android-mips
  • android-mips64
  • android-x86
  • android-x86_64
  • android64
  • android64-aarch64
  • android64-mips64
  • android64-x86_64

自己看着办。

最后直接 make 编译就行。

make -j4 -s

根据自己的 CPU 内存等爱咋咋办,最好加上 -smake 别输出实际执行的内容,对于Windows 的弱鸡控制台来说,还能快不少。

最后编译出来的库就在当前目录

  • libcrypto.a
  • libcrypto.so
  • libssl.a
  • libssl.so

没了。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注