openssl编译安装 您所在的位置:网站首页 openssl源码安装 openssl编译安装

openssl编译安装

#openssl编译安装| 来源: 网络整理| 查看: 265

OpenSSL源码编译安装 一、OpenSSL在Linux平台的编译打包环境源码准备编译安装 二、OpenSSL在Windows平台的编译打包环境编译32位库编译64位库错误处理编译低版本OpenSSL 三、OpenSSL在Android平台的编译打包环境配置环境变量源码准备创建编译脚本执行编译脚本 四、OpenSSL在Mac平台的编译打包环境源码准备执行编译 五、OpenSSL在iOS平台的编译打包环境源码准备创建编译脚本执行编译脚本 无论在什么平台,OpenSSL的编译一般需要经过三个步骤:

使用Configure批处理,根据平台环境、选用的编译器及其他参数设置编译的环境变量。通过使用批处理指令来根据上面设置好的环境变量生成编译脚本文件。使用特定的编译指令进行编译链接。

本文将介绍OpenSSL在Linux、Windows、Android、Mac和iOS平台的编译方式。

一、OpenSSL在Linux平台的编译 打包环境

在这里插入图片描述 需要安装perl、make和gcc。

源码准备

OpenSSL压缩包 解压

编译安装 执行config ./config --prefix=/home/workspace/openssl/output/64

在这里插入图片描述

./config -t

在这里插入图片描述

执行make make

在这里插入图片描述 执行结果: 在这里插入图片描述

执行make test make test

在这里插入图片描述 执行结果: 在这里插入图片描述

执行make install make install

在这里插入图片描述 执行完成后,编译生成的文件将会放到/home/workspace/openssl/output/64目录下: 在这里插入图片描述

二、OpenSSL在Windows平台的编译 打包环境

Windows系统 编译工具:Visual Studio 2019 在这里插入图片描述 INSTALL文件说明了OpenSSL在Windows编译的方式: 在这里插入图片描述 NOTES.WIN文件说明了编译需要的额外依赖工具,我们需要下载安装这些工具,并配置环境变量: 在这里插入图片描述 在这里插入图片描述

编译32位库 打开[x86 Native Tools Command Prompt for VS 2019]:【开始】-【所有程序】—【Microsoft visual studio2019】—【x86 Native Tools Command prompt for VS 2019】(以管理员身份运行) 在这里插入图片描述切换到OpenSSL源码目录 在这里插入图片描述执行编译 #第一步 #若需要编译静态库需要增加no-shared参数,否则默认生成动态库 #perl Configure VC-WIN32 no-shared --prefix=C:\Users\Username\Desktop\openssl\output\32 perl Configure VC-WIN32 --prefix=C:\Users\Username\Desktop\openssl\output\32 #第二步 nmake #第三步 nmake test #第四步 nmake install

编译完成的目标文件: 32位动态库

编译64位库 打开[x64 Native Tools Command Prompt for VS 2019]:【开始】-【所有程序】—【Microsoft visual studio2019】—【x64 Native Tools Command Prompt for VS 2019】(以管理员身份运行) x64 Native Tools Command Prompt for VS 2019切换到OpenSSl源码目录 切换到源码目录执行编译 #第一步 #若需要编译静态库需要增加no-shared参数,否则默认生成动态库 #perl Configure VC-WIN64A no-shared --prefix=C:\Users\Username\Desktop\openssl\output\64 perl Configure VC-WIN64A --prefix=C:\Users\Username\Desktop\openssl\output\64 #第二步 nmake #第三步 nmake test #第四步 nmake install

编译完成的目标文件: 在这里插入图片描述

错误处理

注意:若在执行perl Configure VC-WIN32 --prefix=C:\Users\Username\Desktop\openssl\output\32或perl Configure VC-WIN64A --prefix=C:\Users\Username\Desktop\openssl\output\64时出现下列错误

It looks like you don't have either nmake.exe or dmake.exe on your PATH, so you will not be able to execute the commands from a Makefile. You can install dmake.exe with the Perl Package Manager by running: ppm install dmake

找不到dmake 执行:

ppm install dmake

若执行ppm install dmake还出现下面的错误:

ppm install failed: DBD::SQLite::db selectrow_array failed: database disk image is malformed

ppm无法安装 删除C:\Users\FengGuodong\AppData\Local\ActiveState\ActivePerl目录下的文件: 在这里插入图片描述 重新执行:

ppm install dmake

等待下载安装完成。 在这里插入图片描述 dmake安装完成后,重新开始编译:

#第一步 #编译32位库 #若需要编译静态库需要增加no-shared参数,否则默认生成动态库 #perl Configure VC-WIN32 no-shared --prefix=C:\Users\Username\Desktop\openssl\output\32 perl Configure VC-WIN32 --prefix=C:\Users\Username\Desktop\openssl\output\32 #编译64位库 #若需要编译静态库需要增加no-shared参数,否则默认生成动态库 #perl Configure VC-WIN64A no-shared --prefix=C:\Users\Username\Desktop\openssl\output\64 #perl Configure VC-WIN64A --prefix=C:\Users\Username\Desktop\openssl\output\64 #第二步 nmake #第三步 nmake test #第四步 nmake install 编译低版本OpenSSL

OpenSSL1.0及其以下的版本,编译过程可能略有差别:

# 编译32位动态库 perl Configure VC-WIN32 --prefix=C:\Users\Username\Desktop\openssl\output\32 ms\do_ms.bat # 可以修改ntdll.mak的CFLAG属性为MT或MD nmake -f ms\ntdll.mak nmake -f ms\ntdll.mak clean #编译64位动态库 perl Configure VC-WIN64A --prefix=C:\Users\Username\Desktop\openssl\output\64 ms\do_win64a.bat # 可以修改ntdll.mak的CFLAG属性为MT或MD nmake -f ms\ntdll.mak nmake -f ms\ntdll.mak clean # 编译32位静态库 perl Configure VC-WIN32 --prefix=C:\Users\Username\Desktop\openssl\output\32 ms\do_ms.bat # 可以修改nt.mak的CFLAG属性为MT或MD nmake -f ms\nt.mak nmake -f ms\nt.makk clean #编译64位静态库 perl Configure VC-WIN64A --prefix=C:\Users\Username\Desktop\openssl\output\64 ms\do_win64a.bat # 可以修改nt.mak的CFLAG属性为MT或MD nmake -f ms\nt.mak nmake -f ms\nt.makk clean 三、OpenSSL在Android平台的编译 打包环境

在这里插入图片描述 NOTES.ANDROID文件说明了在Linux系统环境交叉编译Android库的方式,我们需要安装和配置NDK。 在这里插入图片描述 我们将android-ndk-r20b安装在/usr/local/BUILD目录下,那么ndk的编译工具链在目录/usr/local/BUILD/android-ndk-r20b/toolchains下:在这里插入图片描述 NDK必须依赖JDK,Linux环境下搭建Android NDK交叉编译环境请参考《Linux系统Android NDK编译环境搭建》。

配置环境变量 export JAVA_HOME=/usr/local/BUILD/jdk1.8.0_181 export JRE_HOME=${JAVA_HOME}/jre export ANDROID_NDK=/usr/local/BUILD/android-ndk-r20b export PATH=${JAVA_HOME}/bin:${ANDROID_NDK}:${PATH}

在这里插入图片描述

源码准备

OpenSSL压缩包 解压

创建编译脚本

在OpenSSL源码目录下创建build.sh,脚本内容如下:

#!/bin/bash set -e set -x # Android NDK r17之后不支持使用gcc,需要使用clang编译,若不配置使用clang会提示找不到android-gcc命令 CC=clang # OpenSSL源码目录 OPENSSL_PATH=/home/workspace/openssl/openssl-1.1.1b func_cmp() { make clean && rm -rf $OPENSSL_PATH/output/$ARCH && mkdir -p $OPENSSL_PATH/output/$ARCH && export PATH=$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH && ./Configure $ARCH_NAME -D__ANDROID_API__=21 --prefix=$OPENSSL_PATH/output/$ARCH && make && make install } ARCH_NAME=android-arm export PATH=$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH && ./Configure $ARCH_NAME -D__ANDROID_API__=21 --prefix=$OPENSSL_PATH/output/$ARCH #for ARCH in armeabi-v7a armeabi arm64-v8a x86 x86_64 mips mips64 for ARCH in armeabi-v7a armeabi arm64-v8a x86 x86_64 do echo $ARCH if [ "$ARCH" = "armeabi-v7a" ]; then ARCH_NAME=android-arm fi if [ "$ARCH" = "armeabi" ]; then ARCH_NAME=android-arm fi if [ "$ARCH" = "arm64-v8a" ]; then ARCH_NAME=android-arm64 fi if [ "$ARCH" = "mips" ]; then ARCH_NAME=android-mips fi if [ "$ARCH" = "mips64" ]; then ARCH_NAME=android-mips64 fi if [ "$ARCH" = "x86" ]; then ARCH_NAME=android-x86 fi if [ "$ARCH" = "x86_64" ]; then ARCH_NAME=android-x86_64 fi echo $TOOL_CHAIN func_cmp done 执行编译脚本

执行脚本 等待编译完成,在目录/home/workspace/openssl/openssl-1.1.1b/output下可以找到编译好的目标文件: arm x86和x86_64

四、OpenSSL在Mac平台的编译 打包环境

压缩包

源码准备

OpenSSL压缩包 解压后: 解压缩包

执行编译 #第一步 ./config --prefix=/Users/ft/Desktop/openssl/openssl-1.1.1b/output #若需要编译32位的库,需要添加参数KERNEL_BITS=32 #KERNEL_BITS=32 ./config --prefix=/Users/ft/Desktop/openssl/openssl-1.1.1b/output #第二步 make #第三步 make test #第四步 make install

编译生成目标文件: 在这里插入图片描述

五、OpenSSL在iOS平台的编译 打包环境

环境

源码准备

OpenSSL压缩包 解压后: 解压缩包

创建编译脚本 #!/bin/bash set -u OPENSSL_SRC_DIR=${PWD} OPENSSL_BUILD_DIR=${OPENSSL_SRC_DIR}/output OPENSSL_BUILD_LOG_DIR=${OPENSSL_BUILD_DIR}/log OPENSSL_BUILD_UNIVERSAL_DIR=${OPENSSL_BUILD_DIR}/universal OPENSSL_UNIVERSAL_LIB_DIR=${OPENSSL_BUILD_UNIVERSAL_DIR}/lib rm -rf ${OPENSSL_BUILD_DIR} mkdir ${OPENSSL_BUILD_DIR} mkdir -p ${OPENSSL_BUILD_LOG_DIR} mkdir -p ${OPENSSL_BUILD_UNIVERSAL_DIR} mkdir -p ${OPENSSL_UNIVERSAL_LIB_DIR} CLANG=$(xcrun --find clang) IPHONE_OS_SDK_PATH=$(xcrun -sdk iphoneos --show-sdk-path) IPHONE_OS_CROSS_TOP=${IPHONE_OS_SDK_PATH//\/SDKs*/} IPHONE_OS_CROSS_SDK=${IPHONE_OS_SDK_PATH##*/} IPHONE_SIMULATOR_SDK_PATH=$(xcrun -sdk iphonesimulator --show-sdk-path) IPHONE_SIMULATOR_CROSS_TOP=${IPHONE_SIMULATOR_SDK_PATH//\/SDKs*/} IPHONE_SIMULATOR_CROSS_SDK=${IPHONE_SIMULATOR_SDK_PATH##*/} ARCH_LIST=("armv7" "armv7s" "arm64" "i386" "x86_64") ARCH_COUNT=${#ARCH_LIST[@]} CROSS_TOP_LIST=(${IPHONE_OS_CROSS_TOP} ${IPHONE_OS_CROSS_TOP} ${IPHONE_OS_CROSS_TOP} ${IPHONE_SIMULATOR_CROSS_TOP} ${IPHONE_SIMULATOR_CROSS_TOP}) CROSS_SDK_LIST=(${IPHONE_OS_CROSS_SDK} ${IPHONE_OS_CROSS_SDK} ${IPHONE_OS_CROSS_SDK} ${IPHONE_SIMULATOR_CROSS_SDK} ${IPHONE_SIMULATOR_CROSS_SDK}) config_make() { ARCH=$1; export CROSS_TOP=$2 export CROSS_SDK=$3 # 启用bitcode export CC="${CLANG} -arch ${ARCH} -miphoneos-version-min=6.0 -fembed-bitcode" # 不启用bitcode #export CC="${CLANG} -arch ${ARCH} -miphoneos-version-min=6.0" make clean &> ${OPENSSL_BUILD_LOG_DIR}/make_clean.log echo "configure for ${ARCH}..." if [ "x86_64" == ${ARCH} ]; then ./Configure iphoneos-cross --prefix=${OPENSSL_BUILD_DIR}/${ARCH} no-asm &> ${OPENSSL_BUILD_LOG_DIR}/${ARCH}-conf.log else ./Configure iphoneos-cross --prefix=${OPENSSL_BUILD_DIR}/${ARCH} &> ${OPENSSL_BUILD_LOG_DIR}/${ARCH}-conf.log fi echo "build for ${ARCH}..." make &> ${OPENSSL_BUILD_LOG_DIR}/${ARCH}-make.log make install_sw &> ${OPENSSL_BUILD_LOG_DIR}/${ARCH}-make-install.log unset CC unset CROSS_SDK unset CROSS_TOP echo -e "\n" } for ((i=0; i ARCH_LIST[@]/#/${OPENSSL_BUILD_DIR}/} ) LIB_PATHS=( ${LIB_PATHS[@]/%//${LIB_SRC}} ) lipo ${LIB_PATHS[@]} -create -output ${LIB_DST} } create_lib "libssl.a" create_lib "libcrypto.a" cp -R ${OPENSSL_BUILD_DIR}/armv7/include ${OPENSSL_BUILD_UNIVERSAL_DIR} echo "done." 执行编译脚本

将编译脚本build.sh拷贝到OpenSSL目录下,开始执行编译: 在这里插入图片描述 编译生成目标文件: 在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有