Gmssl 各平台编译方法【绝对可用】

最近工作上需要在不同平台上使用SM2、SM4算法,所以需要在不同平台上进行编译Gmssl库,下面是我总结的编译命令。

1、arm-himix200-linux(himix200芯片)

gmssl动态链接库编译,代码如下:

目录:GmSSL-master
$ ./Configure --prefix=/home/qli/libopenssl --cross-compile-prefix=/opt/hisi-linux/x86-arm/arm-himix200-linux/bin/arm-himix200-linux- no-asm shared linux-armv4 -march=armv7-a -D__ARM_MAX_ARCH__=7  
$ make -j4

项目编译,代码如下:

目录:device-authentication 
mkdir build 
cd mkdir 
cmake -DCMAKE_C_COMPILER=/opt/hisi-linux/x86-arm/arm-himix200-linux/bin/arm-himix200-linux-gcc -DCMAKE_CXX_COMPILER=/opt/hisi-linux/x86- arm/arm-himix200-linux/bin/arm-himix200-linux-g++ ..
make -j4

2、arm64

目录:GmSSL-master
$ sudo ./config -DGMSSL_NO_TURBO no-afalgeng
$ make -j4

3、windows64

安装ActivePerl和Visual Studio,以管理员身份打开Visual Studio Tools下的Developer Command Prompt控制台并运行:

目录:GmSSL-master
$ perl Configure VC-WIN64A
$ nmake
$ nmake install

    下面是一些常见的编译错误及原因:

  1. 安装最新的Visual Studio版本,不要使用Visual C++ 6、Visual Studio 2008。
  2. 确保从一份干净的(没有已经编译出来的对象文件或汇编文件)最新Master分支源代码开始编译。
  3. 编译系统没有找到nmake。实际上nmake是Visual Studio自带的工具,不需要单独安装。编译系统无法找到nmake的原因是没有在Visual Studio的命令行环境下执行编译指定。
  4. 无法执行nmake install。这个命令需要以管理员的身份执行。
  5. 对象文件(.obj)和目标平台不一致,通常是由于在Visual Studio的32位控制台下执行perl Configure VC-WIN64A;或者在Visual Studio的64位控制台下执行perl Configure VC-WIN32导致的。

4、Linux64

目录:GmSSL-master
$ ./config
$ make -j4
$ make test
$ sudo make install

5、Android

android-v7

#!/bin/bash

ANDROID_PATH=/usr/local/ndk/android-ndk-r14b
PLATFORM_VERSION=21

MAKE_TOOLCHAIN=$ANDROID_PATH/build/tools/make-standalone-toolchain.sh
export TOOLCHAIN_PATH=$ANDROID_PATH/android-toolchain-arm
$MAKE_TOOLCHAIN --arch=arm --platform=android-$PLATFORM_VERSION --install-dir=$TOOLCHAIN_PATH

export MACHINE=armv7
export SYSTEM=android-v7
export ARCH=arm
export CROSS_SYSROOT=$TOOLCHAIN_PATH/sysroot
export TOOL_BASENAME=$TOOLCHAIN_PATH/bin/arm-linux-androideabi
export CC=$TOOL_BASENAME-gcc
export CXX=$TOOL_BASENAME-g++
export LD=$TOOL_BASENAME-ld
export LINK=$CXX
export AR=$TOOL_BASENAME-ar
export RANLIB=$TOOL_BASENAME-ranlib
export STRIP=$TOOL_BASENAME-strip

../../config
make -j4

android-v8

#!/bin/bash

ANDROID_PATH=/usr/local/ndk/android-ndk-r14b
PLATFORM_VERSION=21

MAKE_TOOLCHAIN=$ANDROID_PATH/build/tools/make-standalone-toolchain.sh
export TOOLCHAIN_PATH=$ANDROID_PATH/aarch64-linux-android
$MAKE_TOOLCHAIN --arch=arm64 --platform=android-$PLATFORM_VERSION --install-dir=$TOOLCHAIN_PATH

export MACHINE=armv8
export SYSTEM=android-v8
export ARCH=arm64
export CROSS_SYSROOT=$TOOLCHAIN_PATH/sysroot
export TOOL_BASENAME=$TOOLCHAIN_PATH/bin/aarch64-linux-android
export CC=$TOOL_BASENAME-gcc
export CXX=$TOOL_BASENAME-g++
export LD=$TOOL_BASENAME-ld
export LINK=$CXX
export AR=$TOOL_BASENAME-ar
export RANLIB=$TOOL_BASENAME-ranlib
export STRIP=$TOOL_BASENAME-strip

../../config
make -j4

我目前只在5个平台用到SM2、SM4算法,上面这几种编译Gmssl库的方式绝对可用。

你可能感兴趣的:(Gmssl)