NDK21編譯openssl-1.1.1h


在centos7下面使用android-ndk-r21d編譯openssl-1.1.1h

基本都是最新版本了,centos7需要安裝一下perl,python

yum -y install perl python

接下來把android-ndk-r21d放到根目錄 /android-ndk-r21d這樣 如果其他路徑記得自己改下面的腳本

下載保存這個腳本 命名為toolchains_path.py

#!/usr/bin/env python
"""
    Get the toolchains path
"""
import argparse
import atexit
import inspect
import os
import shutil
import stat
import sys
import textwrap

def get_host_tag_or_die():
    """Return the host tag for this platform. Die if not supported."""
    if sys.platform.startswith('linux'):
        return 'linux-x86_64'
    elif sys.platform == 'darwin':
        return 'darwin-x86_64'
    elif sys.platform == 'win32' or sys.platform == 'cygwin':
        host_tag = 'windows-x86_64'
        if not os.path.exists(os.path.join(NDK_DIR, 'prebuilt', host_tag)):
            host_tag = 'windows'
        return host_tag
    sys.exit('Unsupported platform: ' + sys.platform)


def get_toolchain_path_or_die(ndk, host_tag):
    """Return the toolchain path or die."""
    toolchain_path = os.path.join(ndk, 'toolchains/llvm/prebuilt',
                                  host_tag)
    if not os.path.exists(toolchain_path):
        sys.exit('Could not find toolchain: {}'.format(toolchain_path))
    return toolchain_path

def main():
    """Program entry point."""
    parser = argparse.ArgumentParser(description='Optional app description')
    parser.add_argument('--ndk', required=True,
                    help='The NDK Home directory')
    args = parser.parse_args()

    host_tag = get_host_tag_or_die()
    toolchain_path = get_toolchain_path_or_die(args.ndk, host_tag)
    print toolchain_path

if __name__ == '__main__':
    main()

然后保存下面的腳本 

#!/bin/bash
set -e
set -x

# Set directory
SCRIPTPATH=$(pwd)
dir=$(pwd)
export ANDROID_NDK_HOME=/android-ndk-r21d
OPENSSL_DIR=$SCRIPTPATH/openssl-1.1.1h

# Find the toolchain for your build machine
toolchains_path=$(python toolchains_path.py --ndk ${ANDROID_NDK_HOME})

# Configure the OpenSSL environment, refer to NOTES.ANDROID in OPENSSL_DIR
# Set compiler clang, instead of gcc by default
CC=clang

# Add toolchains bin directory to PATH
PATH=$toolchains_path/bin:$PATH

# Set the Android API levels
ANDROID_API=21
rm -rf $dir/output
# Set the target architecture
# Can be android-arm, android-arm64, android-x86, android-x86 etc
cpus=( android-arm android-arm64 )
for cur in ${cpus[*]};do
architecture=$cur
echo "--------cur=$architecture-------"
cd $dir
rm -rf openssl-1.1.1h
tar -xf openssl-1.1.1h.tar.gz
# Create the make file
cd ${OPENSSL_DIR}
./Configure ${architecture} -D__ANDROID_API__=$ANDROID_API

# Build
make

# Copy the outputs
OUTPUT_LIB=$SCRIPTPATH/output/lib/${architecture}
mkdir -p $OUTPUT_LIB
cp libcrypto.so $OUTPUT_LIB
cp libcrypto.a $OUTPUT_LIB
cp libssl.so $OUTPUT_LIB
cp libssl.a $OUTPUT_LIB
done

OUTPUT_INCLUDE=$SCRIPTPATH/output/include
mkdir -p $OUTPUT_INCLUDE
cp -RL include/openssl $OUTPUT_INCLUDE

運行這個腳本 會在當前目錄生產output里面有庫和頭文件

本文基本來源於https://blog.csdn.net/iamadk/article/details/97155757


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM