编译和使用安卓版crypto++库

这几天需要在安卓上使用crypto++库,编译搞了半天,官方文档看起来贼费劲。。

我在centos7上编译的,请确保你的机器有GLIBC_2.14版本的库,详见后续问题点。

 

首先根据下面的文档装好ndk和设置环境变量:

https://www.cryptopp.com/wiki/Android_Setup_(Command_Line)

步骤:

一:下载ndk并解压到 /opt 

$ curl -k -L -o android-ndk-r19c-linux-x86_64.zip https://dl.google.com/android/repository/android-ndk-r19c-linux-x86_64.zip
$ sudo unzip android-ndk-r19c-linux-x86_64.zip -d /opt

二、创建符号链接/opt/android-ndk,指向/opt/android-ndk-r19c/

$ sudo ln -s /opt/android-ndk-r19c/ /opt/android-ndk
$ ls -Al /opt/android-ndk
lrwxrwxrwx 1 root root 22 Apr 10 12:41 /opt/android-ndk -> /opt/android-ndk-r19c/

 三、下载安卓SDK并解压到 /opt/android-sdk

$ wget https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip
$ sudo unzip sdk-tools-linux-4333796.zip -d /opt/android-sdk

四、给sdk中的可执行文件添加可执行权限

sudo find /opt -type f -executable -exec chmod +x {} \;

五、更新SDK,安装APIS

$ sudo /opt/android-sdk/tools/bin/sdkmanager --update
$ sudo /opt/android-sdk/tools/bin/sdkmanager "platforms;android-28" "build-tools;28.0.3"

六、设置环境变量

 首先打开/etc/profile,添加一下脚本到该文件:(设置变量ANDROID_NDK_ROOT,ANDROID_SDK_ROOT,ANDROID_HOME)

if [ -d /opt/android-ndk ]; then
   export ANDROID_NDK_ROOT=/opt/android-ndk
fi

if [ -d /opt/android-sdk ]; then
   export ANDROID_SDK_ROOT=/opt/android-sdk
   export ANDROID_HOME=/opt/android-sdk
fi

if [ -e "/usr/libexec/java_home" ]; then
   export JAVA_HOME=$(/usr/libexec/java_home)
elif [ -d "/usr/lib/jvm/java-8-openjdk-amd64" ]; then
   export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
fi

注意自己jdk安装的目录,我的jdk是直接yum安装的,目录跟文档的不一样,

我的jdk目录在/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-3.b13.el7_5.x86_64,所以我将划掉部分替换成以下:

JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-3.b13.el7_5.x86_64
JRE_HOME=$JAVA_HOME/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH

保存/etc/profile。

再打开~/.bash_profile,添加以下脚本到末尾:(将上述变量添加到环境变量PATH)

if [ -d "$ANDROID_NDK_ROOT" ]; then
   export PATH="$PATH:$ANDROID_NDK_ROOT"
fi

if [ -d "$ANDROID_SDK_ROOT/tools/bin" ]; then
   export PATH="$PATH:$ANDROID_SDK_ROOT/tools/bin"
fi

if [ -d "$ANDROID_SDK_ROOT/platform-tools" ]; then
   export PATH="$PATH:$ANDROID_SDK_ROOT/platform-tools"
fi

保存~/.bash_profile。

七、执行exit退出shell,重新登录。

八、执行echo试试变量是否成功设置。

$ echo $ANDROID_NDK_ROOT
/opt/android-ndk
$ echo $ANDROID_SDK_ROOT
/opt/android-sdk
$ echo $ANDROID_HOME
/opt/android-sdk
$ echo $JAVA_HOME
/usr/lib/jvm/java-8-openjdk-amd64

执行完以上步骤,则编译环境已经成功设置好。接下来编译crypto++库。

首先从github下载给安卓使用的crypto++库:https://github.com/noloader/cryptopp-android

下载后解压,进入cryptopp-android-master/cryptopp-8.2,执行脚本./cryptest-android.sh即可完成编译。

该脚本执行了以下操作:

1、解压了当前路径下的源码压缩包cryptopp820.zip:

2、下载两个文件setenv-android.sh、GNUmakefile-cross到当前目录:(我出现过多次下载失败的情况,多试几次。。)

https://www.cryptopp.com/wiki/Android_(Command_Line)这个文档解释, 因为Android不断更改KDK?,工具链和工具路径,所以setenv-android.sh需要不断变动来匹配对应的AndroidNDK版本。这可能就是需要实时下载这两个文件的原因吧。

3、将父目录的Android.mk和Application.mk复制到当前目录,修改一些宏定义,然后遍历四个平台armeabi-v7a arm64-v8a x86 x86_64,使用ndk-build为这些平台执行编译:

 

问题点:我在centos6.8上执行的时候报找不到/lib64/libc.so.6: version `GLIBC_2.14' not found

网友说法:出现这种错误表明程序运行需要GLIBC_2.14,但是系统中却并不存在,因此可以先用strings命令查看下系统中的GLIBC版本:

strings /lib64/libc.so.6 | grep GLIBC

我发现我的centos6.8系统中确实没有这个版本,于是我换了centos7查看了下,有这个版本。为避免产生更多问题,所以我直接在centos7上执行编译了。

等待良久,成功编译通过。

在以下目录成功生成了动态库和静态库:

到此给安卓使用的crypto++库编译完成。

最后,我将库导入到android studio使用的过程中也遇上了不少问题,下回再介绍导入和使用库的过程。

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以按照以下步骤在Windows下编译Crypto++: 1. 下载Crypto++源代码。你可以从官网(https://www.cryptopp.com/)或Github(https://github.com/weidai11/cryptopp)上下载最新本的源代码。 2. 解压源代码压缩包到一个目录中。 3. 打开Visual Studio,创建一个新的空项目。 4. 将Crypto++源代码目录中的“cryptlib.h”和“config.h”文件添加到你的项目中。 5. 在Visual Studio中打开项目属性,选择“C/C++” -> “常规” -> “附加包含目录”,将Crypto++源代码目录添加到附加包含目录中。 6. 在项目中添加你要编译Crypto++源代码文件,例如AES加密的源代码文件“aes.cpp”和“rijndael.cpp”。 7. 在Visual Studio中打开“属性管理器”,选择“Microsoft.Cpp.Win32.user”属性表(如果你的项目是32位的)或“Microsoft.Cpp.x64.user”属性表(如果你的项目是64位的)。 8. 在“属性管理器”中选择“VC++目录” -> “包含目录”,添加Crypto++源代码目录。 9. 在“属性管理器”中选择“VC++目录” -> “目录”,添加Crypto++源代码目录中的“Win32”(如果你的项目是32位的)或“x64”(如果你的项目是64位的)目录。 10. 在Visual Studio中打开“属性页”,选择“链接器” -> “输入”,添加“cryptlib.lib”到附加依赖项中。 11. 点击“生成” -> “生成解决方案”开始编译。 完成上述步骤后,你就可以在Windows上使用Visual Studio编译Crypto++了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值