使用NDK编译OpenSSL与curl
使用NDK编译OpenSSL与curl
0. 编译环境
Ubuntu 20.04
android-ndk-r12b
OpenSSL-1.1.0i
curl-7.76.0
1. 声明编译环境
新建编译环境相关变量设置脚本,并执行该脚本:
hyj@hyj-ubuntu:~/workspace/curl_x64_r12b$ cat envsetup.sh
#!/bin/sh#adjust the following two line definition to your develop environment
NDK_ROOT=/home/hyj/workspace/android-ndk-r12b
HOST_PLATFORM=linux-x86_64
TARGET_PLATFORM=ARM_V3S#below lines always keep not changed
PROJECT_ROOT=$(pwd)
INSTALL_ROOT=${PROJECT_ROOT}/outputSYSROOT=${NDK_ROOT}/platforms/android-21/arch-arm64
CROSS_TOOLCHAIN=${NDK_ROOT}/toolchains/aarch64-linux-android-4.9/prebuilt/${HOST_PLATFORM}/bin/aarch64-linux-android-
CONFIGURE_PARAMETERS="--with-sysroot={SYSROOT} --host=arm-linux --prefix=${LIBRARY_INSTALL_PATH}"
CFLAGS="-D$TARGET_PLATFORM --sysroot=${SYSROOT} \-Wformat -Werror=format-security -fexceptions -Os -fno-omit-frame-pointer -ggdb3 \-ffunction-sections -funwind-tables -fstack-protector -no-canonical-prefixes -Os -g -DNDEBUG \-fno-strict-aliasing -finline-limit=64 -O3 -I${SYSROOT}/usr/include \-I${NDK_ROOT}/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/lib/gcc/aarch64-linux-android/4.9.x/include -I${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.9/include \-I${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/"
LDFLAGS="-lgcc ${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/libgnustl_static.a \-no-canonical-prefixes -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now \-L${NDK_ROOT}/platforms/android-21/arch-arm64/usr/lib \${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/libsupc++.a -lc -lm \--sysroot=${NDK_ROOT}/platforms/android-21/arch-arm64"mkdir -p $INSTALL_ROOT
CC=${CROSS_TOOLCHAIN}gcc
CPP="${CROSS_TOOLCHAIN}cpp --sysroot=${SYSROOT}"
CXX=${CROSS_TOOLCHAIN}g++
CXXCPP="${CROSS_TOOLCHAIN}cpp --sysroot=${SYSROOT}"
RANLIB=${CROSS_TOOLCHAIN}ranlib
LD=${CROSS_TOOLCHAIN}ld
AR=${CROSS_TOOLCHAIN}ar
STRIP=${CROSS_TOOLCHAIN}stripPROJECT_ROOT=${PROJECT_ROOT} \
INSTALL_ROOT=${INSTALL_ROOT} \
SYSROOT=${SYSROOT} \
CFLAGS=${CFLAGS} \
LDFLAGS=${LDFLAGS} \
CONFIGURE_PARAMETERS=${CONFIGURE_PARAMETERS} \
CROSS_TOOLCHAIN=${CROSS_TOOLCHAIN} \
CC=${CC} \
CPP=${CPP} \
CXX=${CXX} \
CXXCPP=${CXXCPP} \
LD=${LD} \
RANLIB=${RANLIB} \
AR=${AR} \
STRIP=${STRIP} \bash
hyj@hyj-ubuntu:~/workspace/curl_x64_r12b$ ./envsetup.sh
hyj@hyj-ubuntu:~/workspace/curl_x64_r12b$
将编译链与相关源码下载并解压到本地之后,工程目录下的内容如下:
hyj@hyj-ubuntu:~/workspace/curl_x64_r12b$ tree -L 1
.
├── curl-7.76.0
├── curl-7.76.0.tar.bz2
├── envsetup.sh
├── openssl-1.1.0i
├── openssl-1.1.0i.tar.gz
└── output3 directories, 3 files
2. 编译OpenSSL
进入OpenSSL目录,执行工程配置命令:
cd openssl-1.1.0i
./config --prefix=${INSTALL_ROOT}/openssl no-asm no-threads -shared --sysroot=${SYSROOT}
编辑openssl-1.1.0i/Makefile,删除该文件中所有的"-m64"选项,并进行编译与安装相关文件:
make -j8
make install
${CROSS_TOOLCHAIN}strip ${INSTALL_ROOT}/openssl/lib/*.so*
进入output目录,能够看到适用于ARM x64架构的OpenSSL的相关文件已经生成:
hyj@hyj-ubuntu:~/workspace/curl_x64_r12b/output$ tree -L 3
.
└── openssl├── bin│ ├── c_rehash│ └── openssl├── include│ └── openssl├── lib│ ├── engines-1.1│ ├── libcrypto.a│ ├── libcrypto.so -> libcrypto.so.1.1│ ├── libcrypto.so.1.1│ ├── libssl.a│ ├── libssl.so -> libssl.so.1.1│ ├── libssl.so.1.1│ └── pkgconfig├── share│ ├── doc│ └── man└── ssl├── certs├── misc├── openssl.cnf├── openssl.cnf.dist└── private14 directories, 10 files
hyj@hyj-ubuntu:~/workspace/curl_x64_r12b/output$ file openssl/lib/*
openssl/lib/engines-1.1: directory
openssl/lib/libcrypto.a: current ar archive
openssl/lib/libcrypto.so: symbolic link to libcrypto.so.1.1
openssl/lib/libcrypto.so.1.1: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, stripped
openssl/lib/libssl.a: current ar archive
openssl/lib/libssl.so: symbolic link to libssl.so.1.1
openssl/lib/libssl.so.1.1: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, stripped
openssl/lib/pkgconfig: directory
3. 编译curl
进入curl源码目录,执行工程配置命令,并进行编译与安装:
./configure --with-sysroot=${SYSROOT} --host=arm-linux --prefix=${INSTALL_ROOT}/curl --with-ssl=${INSTALL_ROOT}/openssl --disable-all --enable-shared --enable-static --without-libidn --without-librtmp --without-gnutls --without-nss --without-libssh2 --without-zlib --without-winidn --disable-rtsp --disable-ldap --disable-ldaps --disable-ipv6
make clean
make -j8
make install
${CROSS_TOOLCHAIN}strip ${INSTALL_ROOT}/curl/lib/*.so*
进入output目录,能够看到适用于ARM x64架构的curl的相关文件已经生成:
hyj@hyj-ubuntu:~/workspace/curl_x64_r12b/output$ tree -L 3
.
├── curl
│ ├── bin
│ │ ├── curl
│ │ └── curl-config
│ ├── include
│ │ └── curl
│ ├── lib
│ │ ├── libcurl.a
│ │ ├── libcurl.la
│ │ ├── libcurl.so -> libcurl.so.4.7.0
│ │ ├── libcurl.so.4 -> libcurl.so.4.7.0
│ │ ├── libcurl.so.4.7.0
│ │ └── pkgconfig
│ └── share
│ ├── aclocal
│ └── man
└── openssl├── bin│ ├── c_rehash│ └── openssl├── include│ └── openssl├── lib│ ├── engines-1.1│ ├── libcrypto.a│ ├── libcrypto.so -> libcrypto.so.1.1│ ├── libcrypto.so.1.1│ ├── libssl.a│ ├── libssl.so -> libssl.so.1.1│ ├── libssl.so.1.1│ └── pkgconfig├── share│ ├── doc│ └── man└── ssl├── certs├── misc├── openssl.cnf├── openssl.cnf.dist└── private23 directories, 17 files
hyj@hyj-ubuntu:~/workspace/curl_x64_r12b/output$ file openssl/lib/*.so*
openssl/lib/libcrypto.so: symbolic link to libcrypto.so.1.1
openssl/lib/libcrypto.so.1.1: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, stripped
openssl/lib/libssl.so: symbolic link to libssl.so.1.1
openssl/lib/libssl.so.1.1: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, stripped
hyj@hyj-ubuntu:~/workspace/curl_x64_r12b/output$
使用NDK编译OpenSSL与curl相关推荐
- ActivePerl+zlib+OpenSSL+libssh2+curl编译(windows)
WINDOWS平台上使用CURL库发送网络消息,必须支持https,那么CURL库也就必须带OPENSSL,我电脑是WIN7系统32位,故以下的各种编译均是在该环境下实测通过 如果需要支持汇编,还需要 ...
- android arm代码,为Android ARMV7编译OpenSSL 1.1.0
我试图在Ubuntu机器上为Android ARMV7编译OpenSSL 1.1.0(k).但我只能为android,android armabi,android64(-aarch64)目标编译. 我 ...
- 安卓编译OpenSSL源码
安卓编译OpenSSL源码. 编译OpenSSL是用ndk来编译源码的方式来生成应用程序和动态库,这种官方源码支持也比较便利. 1.下载源码解压. 注意不要下载GitHub里面的源码,最新的3.0配置 ...
- 智能家居(7) —— 人脸识别 翔云平台编程使用(编译openSSL支持libcurl的https访问、安装SSL依赖库openSSL)
目录 一.祥云人工智能开放平台 二.编译openSSL支持libcurl的https访问 安装SSL依赖库openSSL(使用工具wget) curl库重新配置,编译,安装 三.编程实现人脸识别 翔云 ...
- android2.2编译,Android NDK编译Box2D_V2.2
如果大家有留意的话,就知道现在很流行的 愤怒的小鸟 的物理引擎是使用了Box2D,那么如何将这好东西移植到Android上呢?在网上找了一遍,发现资料还是少得可怜,于是自己研究研究一下,遇到问题就go ...
- 【Android开发】:在任意目录执行NDK编译
2019独角兽企业重金招聘Python工程师标准>>> 文以简单的例子讲述如何在任意目录把自己写的C代码使用NDK提供的交叉编译该工具来编译成Android可使用的静态库/动态库. ...
- Android开发实践:在任意目录执行NDK编译
本文暂时不讲述如何用NDK编译第三方开源代码库,而是先以简单的例子讲述如何在任意目录把自己写的C代码编译成Android可使用的静态库/动态库. 1. 准备环境 首先,你得安装了Android的NDK ...
- win10系统 ubuntu子系统 进行ndk编译笔记
报错1:error adding symbols: file in wrong format collect2: error: ld returned 1 exit status win10系统 ub ...
- NDK 编译和使用静态库、动态库
NDK 编译和使用静态库.动态库 情况一:编译静态库 情况二:编译动态库 情况三:编译动态库+静态库 情况四:已有第三方静态库(动态库),编译静态库(动态库) 默认所有代码和文件在$project/j ...
最新文章
- python学习干货教程(10):列表
- android音视频工程师,音视频学习 (十三) Android 中通过 FFmpeg 命令对音视频编辑处理(已开源)...
- ScrollView 嵌套EditText 滑动冲突解决
- java取路径含中文_java获取项目路径中文乱码
- This relative module was not found ./cptable webpack
- Linux环境下创建运行.java文件
- [cerc2012][Gym100624B]20181013
- 志邦橱柜坑爹,志邦橱柜大忽悠,志邦橱柜欺骗
- Apple Watch再立功!67岁男子意外摔倒后得救
- Scala的初步学习(一)
- Linux常用命令--uname
- 从输入URL到页面加载的全过程
- 固态硬盘受损或数据删除,怎么办?详解各种恢复SSD数据方法
- 解决win7资源监视器不能开启
- abb机器人编程指令goto指令_abb机器人编程指令——轨迹偏移使用的指令以及moveL指令...
- 读《天才在左,疯子在右》03--灵魂深处
- 推送流程(极光推送)
- 精心分享8个让人大开眼界的软件和网站,极大提高办公效率
- 网络技术| 说说计算机网络及IP地址 -- 网络基础 跳线制作 IP地址配置
- HEVC 高级运动向量预测技术(AMVP)
热门文章
- QI认证的测试内容有哪些?
- 9.04亿网民真实数据曝光,超7成月收入竟不到这个数?
- MFC之滑块与旋转控件23
- c#,c++,qt中多线程访问UI控件线程的问题汇总
- 什么是随机数?什么是随机数种子?
- 让北大青鸟网络工程师飞得更高更快!
- explorer.exe 遇到问题需要关闭。我们对此引起的不便表示抱歉
- 我的世界java启动程下载_我的世界java启动器下载
- 老猿学5G扫盲贴:3GPP规范文档命名规则及同系列文档阅读指南
- hd disk / disk raid / disk io / iops / iostat / iowait / iotop / iometer