赞
踩
cd /Users/xxxx/Downloads/GmSSL-main
./config
上图中错误解决方法
使用文本编辑器打开SDK目录下Configure、test/build.info、test/run_tests.pl。
use if $^O ne "VMS", "File::Glob" => qw/glob/;
改为
use if $^O ne "VMS", "File::Glob" => qw/:glob/;
从包含srp.h头文件的GMSS工程中拷贝srp.h到GmSSL-main–>include–>openssl
有安装需求的才安装,只是编译库文件不必安装GMSSL到电脑
make
make test
sudo make install
gmssl version
查看gmssl安装路径
which gmssl
查看openssl安装路径
which openssl
删除gmssl安装文件
rm -rf /user/local/bin/gmssl
删除openssl安装文件
rm -rf /user/local/bin/openssl
删除openssl头文件
sudo rm -rf /user/local/include/openssl
添加新文件到GmSSL项目目录中,下面以GmSSL–>ssl文件为例
新文件引入gmssl头文件格式
引入格式 #include <openssl/xxx.h>
如果编写的新文件需要使用到gmssl中的头文件,引入格式是#include <openssl/xxx.h>,否则编译过程中会报找不到头文件的错误。
修改build.info文件
gmssl项目的每个参与编译的文件夹下都有build.info文件,向build.info中添加需要参与编译的文件路径
编译环境准备:Mac电脑,Xcode。
make distclean
export CC="clang -arch armv7"
export PATH="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin:$PATH"
export CROSS_TOP=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer
export CROSS_SDK=iPhoneOS17.2.sdk
export IPHONEOS_DEPLOYMENT_TARGET=8.0
./Configure ios-cross no-shared -DGMSSL_NO_TURBO
make
make distclean
export CC="clang -arch arm64"
export PATH="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin:$PATH"
export CROSS_TOP=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer
export CROSS_SDK=iPhoneOS17.2.sdk
export IPHONEOS_DEPLOYMENT_TARGET=8.0
./Configure ios64-cross no-shared -DGMSSL_NO_TURBO
make
make distclean
export CC="clang -arch i386 -arch x86_64"
export PATH="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin:$PATH"
export CROSS_TOP=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer
export CROSS_SDK=iPhoneSimulator17.2.sdk
export IPHONEOS_DEPLOYMENT_TARGET=8.0
./Configure iphoneos-cross no-shared -DGMSSL_NO_TURBO
make
lipo -create 模拟器.a文件路径 真机.a文件路径 -output 合成的.a文件路径
lipo -info .a文件路径
编译环境:Mac电脑,NDK,Linux系统。
下载NDK到本地,选择一个比较新的版本下载即可,我选择的是android-ndk-r17c-linux-x86_64.zip。
Android动态库必须在Linux系统下编译,因此需要在Mac电脑上安装虚拟机,我选择的是ubuntu系统。
下载破解版VMware Fusion,然后安装软件到电脑。
前往Ubuntu官网下载带有桌面GUI的Ubuntu版本。
安装Ubuntu Desktop版本
sudo apt update
sudo apt-get install make
sudo apt-get install gcc
sudo apt install open-vm-tools open-vm-tools-desktop
共享文件夹一般都在/mnt/hgfs/路径下。
cd /mnt/hgfs
ls /mnt/hgfs
如果查不到添加的共享文件夹可执行如下命令重新挂载。
sudo mkdir -p /mnt/hgfs
sudo mount -t fuse.vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other
脚本中的gmssl2-ubuntu为共享文件夹,添加共享文件夹的步骤请参考3.3章节,将编写好的脚本文件、NDK、GmSSL的源码放在gmssl2-ubuntu中。
#!/bin/bash # Define paths and environment variables # 获取脚本当前所在路径 CURRENT_PATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" # 获取GmSSL源码路径 GMSSL_DIR=$CURRENT_PATH/GmSSL2.5.4 # 取脚本执行的第一个参数 ANDROID_TARGET_ABI=$1 # 获取NDK路径 ANDROID_PATH=/mnt/hgfs/gmssl2-ubuntu/android-ndk-r17c # 适配最低版本 PLATFORM_VERSION=21 MAKE_TOOLCHAIN=$ANDROID_PATH/build/tools/make-standalone-toolchain.sh export TOOLCHAIN_PATH=$ANDROID_PATH/toolchains $MAKE_TOOLCHAIN --arch=arm --platform=android-$PLATFORM_VERSION --install-dir=$TOOLCHAIN_PATH if [ "$ANDROID_TARGET_ABI" == "armeabi-v7a" ] then #armv7:armv7a(32位) export MACHINE=armv7 #armv7:android export SYSTEM=android #armv7:arm export ARCH=arm # ("armeabi" "armeabi-v7a" "arm64-v8a" "x86" "x86_64" ) outdir=armeabi-v7a # ("android" "android-armeabi" "android64-aarch64" "android-x86" "android64") architecture=android-armeabi export TOOL_BASENAME=$TOOLCHAIN_PATH/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi export CROSS_SYSROOT="$ANDROID_PATH/platforms/android-$PLATFORM_VERSION/arch-arm -isystem $ANDROID_PATH/sysroot/usr/include -isystem $ANDROID_PATH/sysroot/usr/include/arm-linux-androideabi" elif [ "$ANDROID_TARGET_ABI" == "arm64-v8a" ] then #armv8:arm64(64位) export MACHINE=armv8 #armv8:android-v8 export SYSTEM=android-v8 #armv8:aarch64 export ARCH=aarch64 # ("armeabi" "armeabi-v7a" "arm64-v8a" "x86" "x86_64" ) outdir=arm64-v8a # ("android" "android-armeabi" "android64-aarch64" "android-x86" "android64") architecture=android64-aarch64 export TOOL_BASENAME=$TOOLCHAIN_PATH/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android export CROSS_SYSROOT="$ANDROID_PATH/platforms/android-$PLATFORM_VERSION/arch-arm64 -isystem $ANDROID_PATH/sysroot/usr/include -isystem $ANDROID_PATH/sysroot/usr/include/aarch64-linux-android" elif [ "$ANDROID_TARGET_ABI" == "x86" ] then # ("armeabi" "armeabi-v7a" "arm64-v8a" "x86" "x86_64" ) outdir=x86 # ("android" "android-armeabi" "android64-aarch64" "android-x86" "android64") architecture=android-x86 export TOOL_BASENAME=$TOOLCHAIN_PATH/x86-4.9/prebuilt/linux-x86_64/bin/i686-linux-android export CROSS_SYSROOT="$ANDROID_PATH/platforms/android-$PLATFORM_VERSION/arch-x86 -isystem $ANDROID_PATH/sysroot/usr/include -isystem $ANDROID_PATH/sysroot/usr/include/i686-linux-android" elif [ "$ANDROID_TARGET_ABI" == "x86_64" ] then # ("armeabi" "armeabi-v7a" "arm64-v8a" "x86" "x86_64" ) outdir=x86_64 # ("android" "android-armeabi" "android64-aarch64" "android-x86" "android64") architecture=android64 export TOOL_BASENAME=$TOOLCHAIN_PATH/x86_64-4.9/prebuilt/linux-x86_64/bin/x86_64-linux-android export CROSS_SYSROOT="$ANDROID_PATH/platforms/android-$PLATFORM_VERSION/arch-x86_64 -isystem $ANDROID_PATH/sysroot/usr/include -isystem $ANDROID_PATH/sysroot/usr/include/arch-x86_64" else echo "Unsupported target ABI: $ANDROID_TARGET_ABI" exit 1 fi 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 # Navigate to OpenSSL directory cd ${GMSSL_DIR} # Configure with sysroot and prefix ./Configure ${architecture} -D__ANDROID_API__=$PLATFORM_VERSION no-asm no-unit-test no-serpent # Build OpenSSL make # Copy the outputs OUTPUT_INCLUDE=$CURRENT_PATH/output/include OUTPUT_LIB=$CURRENT_PATH/output/lib/${outdir} mkdir -p $OUTPUT_INCLUDE mkdir -p $OUTPUT_LIB cp -RL include/openssl $OUTPUT_INCLUDE cp libcrypto.so $OUTPUT_LIB cp libcrypto.a $OUTPUT_LIB cp libssl.so $OUTPUT_LIB cp libssl.a $OUTPUT_LIB
我将编写好的脚本文件命名为and.sh。gmssl2-ubuntu中的文件结构如下:
以下所有的编译指令都在Linux系统中执行。编译失败或重新编译架构之前在GmSSL源码的根目录下执行:make distclear
chmod a+x and.sh
and.sh armeabi-v7a
and.sh arm64-v8a
and.sh x86
and.sh x86_64
编译出来的动态库
cd /Users/xxxx/Desktop/gmssl2-ubuntu/out/output/lib/armeabi
file libcrypto.so
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。