交叉编译 Crypto++

交叉编译 Crypto++

概述

Crypto++ 是一个免费开源的 C++ 密码学库,由 Wei Dai(美籍华裔)首次开发,当前由 Crypto++ 项目团队维护,源代码在 github 上进行托管。

下载

开发版本(最新)

如果以研究学习为目的,或者希望尝试最新特性,又或者希望参与到 Crypto++ 的开发中,可以直接从 github 上拉取最新源码,拉取命令:

git clone https://github.com/weidai11/cryptopp.git

技巧:在 github 页面点击右上角的 Code 按钮获取 git clone 链接。

发行版本

如果以商用量产为目的,一般选择正式的发行版本为佳。在 Crypto++ 的 Download 页面,源码以压缩包的形式提供,根据需求选择合适的版本进行下载,以最新的 Crypto++ 8.6.0 为例,在下载页面点击 Crypto++ 8.6.0 下载链接:

download

也可以直接使用 wget 命令下载:

wget https://www.cryptopp.com/cryptopp860.zip

交叉编译

解压缩源码包,如果使用 git clone 拉回来的代码可以忽略这一步

unzip cryptopp860.zip -d cryptopp860

在开始进行交叉编译前建议先阅读一下 Readme.txtInstall.txt 这两份文件,其中 Readme.txt 文件主要介绍了 Crypto++ 的特性与版本历史,Install.txt 文件主要介绍了如何在各个平台进行编译安装的细节,当前也包括如何进行交叉编译。
相对而言,对 Crypto++ 进行交叉编译还是比较简单的,因为 Crypto++ 库使用的是 Makefile 进行编译,只需要在执行 make 命令前配置 CXX 环境变量即可。
参考 Install.txt 第 60, 61 行:

Install.txt
----------------
export CXX=/opt/intel/bin/icpc
make

其中的 /opt/intel/bin/icpc 即是 C++ 交叉编译器的路径,在本专栏系列中,交叉编译器的路径在 /opt/toolchains/aarch64--glibc--stable-2020.08-1/bin 目录,通过编写环境变量配置文件 aarch64-environment-setup 将交叉编译所需要用到的工具进行配置。

aarch64-environment-setup:

export TOOLCHAIN_ROOT=/opt/toolchains/aarch64--glibc--stable-2020.08-1
export BUILDSYSROOT=$TOOLCHAIN_ROOT/aarch64-buildroot-linux-gnu/sysroot
export PATH=$TOOLCHAIN_ROOT/bin:$PATH

export PREFIX=/usr

export CC="aarch64-linux-gcc --sysroot=$BUILDSYSROOT"
export CXX="aarch64-linux-g++ --sysroot=$BUILDSYSROOT"
export CPP="aarch64-linux-gcc -E --sysroot=$BUILDSYSROOT"
export LD="aarch64-linux-ld --sysroot=$BUILDSYSROOT"
export AR=aarch64-linux-ar
export AS=aarch64-linux-as
export NM=aarch64-linux-nm
export GDB=aarch64-linux-gdb
export OBJDUMP=aarch64-linux-objdump
export OBJCOPY=aarch64-linux-objcopy
export RANLIB=aarch64-linux-ranlib
export READELF=aarch64-linux-readelf
export STRIP=aarch64-linux-strip

export CROSS_COMPILE=aarch64-linux-

export PKG_CONFIG_SYSROOT_DIR=$BUILDSYSROOT
export PKG_CONFIG_PATH=$BUILDSYSROOT/usr/lib/pkgconfig:$BUILDSYSROOT/usr/share/pkgconfig

编写好配置文件之后使用 source 命令使之立即生效,这样可以使用正确的交叉编译器进行编译,同时在配置 CCCXXCPPLD 环境变量时指定 --sysroot=<dir> 参数让交叉编译器搜索 dir 目录下的头文件与库文件。

source aarch64-environment-setup
make
make DESTDIR=/tmp/sysroot install

DESTDIR 是每个已安装目标文件的前缀变量。
DESTDIR 变量由用户在 make 命令行上指定为绝对文件名。

make DESTDIR=/tmp/stage install

DESTDIR 应该只在 install* 和 uninstall* 目标中受支持,因为只有这些目标才有用。
如果您的安装步骤通常会安装 /usr/local/bin/foo 和 /usr/local/lib/libfoo.a,那么在上面的示例中调用的安装将安装 /tmp/state/usr/local/biin/foo 和 /tmp/stage/usr/local/lib-libfoo.a。

以这种方式将变量 DESTDIR 前置到每个目标提供了分段安装,其中安装的文件不会直接放置到其预期位置,而是复制到临时位置(DESTDIR)。但是,已安装的文件保持其相对目录结构,不会修改任何嵌入的文件名。

更详细说明可参考 DESTDIR 官方说明。

DESTDIR

我们使用 make install DESTDIR=... 将编译产物安装到指定文件夹中。

最后会在 /tmp/sysroot 目录下产生 usr 文件夹,该文件夹是由 aarch64-environment-setup 中的 PREFIX=/usr 环境变量指定的。makefile 文件将交叉编译生成的 cryptest.exe 拷贝到 /usr/bin 目录,头文件拷贝到 /usr/include/cryptopp 目录,静态库文件拷贝到 /usr/lib 目录,以及测试数据拷贝到 /usr/share/cryptopp 目录。对于依赖 libcryptopp 库的开发而言,只需要关注 includelib 两目录即可。

编译成动态库

默认情况下,make 生成的是静态库 libcryptopp.a,如果需要生成动态库需要执行:

make dynamic

或者

make libcryptopp.so

欢迎关注我的公众号:飞翔的小黄鸭
也许会发现不一样的风景


△ \triangle 交叉编译 JsonCpp 库
▽ \bigtriangledown QNX 7.1 交叉编译 boost 1.76

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值