首页 > 其他分享 >libcurl 移植 支持https,openssl NDK (二)

libcurl 移植 支持https,openssl NDK (二)

时间:2023-05-07 15:32:38浏览次数:52  
标签:NDK libcurl openssl without -- disable export linux SYSROOT


一 、编译环境介绍:(有一部分原因是环境造成编译失败)
系统版本:ubuntu-16.04.3-desktop-amd64 64位(可以使用虚拟机)
NDK版本:Android-ndk-r10b                  (已经测试,使用 Android-ndk-r17b无法通过)
源码版本: curl-7.61.0                 https://curl.haxx.se/download/curl-7.61.0.tar.gz(一个稳定不太旧的版本)
二、编译步骤,设置临时编译环境
1.下载 curl-7.61.0源码 包,解压
2.在curl-7.61.0

注:如果环境不一样,请修改脚本中如下几个导出的环境变量为自己的环境变量,需要自己确定工具链版本及api版本

_ANDROID_NDK="android-ndk-r10b"

_ANDROID_EABI="arm-linux-androideabi-4.9"

_ANDROID_API="android-L"

三、配置依赖库

 1.将 libcurl 移植 支持https,openssl NDK(一)中生成的库,头文件  放到 指定的目录 :例openssl/openssl64
 2.在脚本中需要指定例:

 export LDFLAGS="-pie -fPIE -L$(pwd)/openssl64/lib"
export CFLAGS="-pie -fPIE -I$(pwd)/openssl64/include"

--with-ssl=$(pwd)/openssl64

四、最重要的是脚本来了

以下是具体内容:(32、64稍有区别)
curl_android_build.sh

#!/bin/bash
LOCAL_NDK_HOME=/home/aa/android-ndk-r10b/
VERBOSE=1 
set_env_aarch64(){
#编辑依赖库选项 libc libssl libcrypto libc #如何不链接libc 链接时可能会报pthread_xxxxx相关函数未定义,这是一个坑#点 
#export LIBS="-ldl -lc -lssl -lcrypto" 
export LDFLAGS="-pie -fPIE -L$(pwd)/openssl64/lib"
export CFLAGS="-pie -fPIE -I$(pwd)/openssl64/include"
export CFLAGS="-DHAVE_OPENSSL -DHAVE_CONFIG_H -DBUILDING_LIBCURL -DCURL_STATICLIB -DUSE_OPENSSL -I${SYSROOT}/usr/include"
export CC="${LOCAL_NDK_HOME}toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-gcc --sysroot=$SYSROOT"
export ANDROID_SYSROOT=$SYSROOT
export CROSS_SYSROOT=$ANDROID_SYSROOT
}
set_env_arm(){
#export LIBS="-ldl -lc -lssl -lcrypto" 
export PREFIX=$(pwd)/android-lib
export SYSROOT="${LOCAL_NDK_HOME}platforms/android-L/arch-arm"
export LDFLAGS="-pie -fPIE -L$(pwd)/openssl/lib"
export CFLAGS="-pie -fPIE -I$(pwd)/openssl/include"
export CC="${LOCAL_NDK_HOME}toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc --sysroot=$SYSROOT"
export CXX="${LOCAL_NDK_HOME}toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-g++ --sysroot=$SYSROOT"
export ANDROID_SYSROOT=$SYSROOT
export CROSS_SYSROOT=$ANDROID_SYSROOT
}
 
#make clean
if test $1 -eq 1 ;then 
set_env_arm
#指定编译配置选项 --host指定目标平台 --with-ssl开启https支 
./configure  --prefix=$PREFIX \ 
 --host=arm-androideabi_linux \
 --with-ssl=$(pwd)/openssl \
 --disable-share\
 --enable-static \
 --disable-dict \
 --disable-ftp \
 --disable-imap \
 --disable-ldap \
 --disable-ldaps \
 --disable-pop3 \
 --disable-proxy \
 --disable-rtsp \
 --disable-smtp \
 --disable-telnet \
 --disable-tftp \
 --disable-zlib \
 --without-ca-bundle \
 --without-gnutls \
 --without-libidn \
 --without-librtmp \
 --without-libssh2 \
 --without-nss \
 --without-zlib \
 --prefix=$PREFIX #指定输出文件目录
make
make install
elif test $1 -eq 2 ;then
set_env_aarch64
./configure --host=aarch64-linux-androideabi \
 --with-ssl$(pwd)/openssl64 \
 --disable-share\
 --enable-static \
 --disable-dict \
 --disable-ftp \
 --disable-imap \
 --disable-ldap \
 --disable-ldaps \
 --disable-pop3 \
 --disable-proxy \
 --disable-rtsp \
 --disable-smtp \
 --disable-telnet \
 --disable-tftp \
 --disable-zlib \
 --without-ca-bundle \
 --without-gnutls \
 --without-libidn \
 --without-librtmp \
 --without-libssh2 \
 --without-nss \
 --without-zlib \
 --prefix=/home/aa/Downloads/curl-7.61.0/out/arm64 #指定输出文件目录 
make
make install
exit
fi

 在命令终端上执行 sudo ./curl_android_build.sh 1 生成 v7 32位

 在命令终端上执行 sudo ./curl_android_build.sh 2 生成 v8 64位

 

标签:NDK,libcurl,openssl,without,--,disable,export,linux,SYSROOT
From: https://blog.51cto.com/u_12389088/6252060

相关文章

  • Windows10下安装OpenSSL curl WIN32 /WIN64 openssl1.1.x
     首先是环境,强调下环境,很多问题是环境造成的。1.WINDOWS1064位系统;2.VisualStudio2015 工具: 1.ActivePerl-5.24.3.2404-MSWin32-x64-404865.exe,下载地址:https://www.activestate.com/products/activeperl/downloads/  2. openssl-1.1.0f.tar.gz  下载地址: h......
  • Android NDK 内存泄露检测
     Andorid中Java层代码内存泄露可以借助leakcanary进行检测;C++上的内存泄露检测库LeakTracer,于是再找了下,找到了Android上的移植版。首先建立一个项目,在根目录下建立thirdparty目录,进入该目录,clone相关库代码:[email protected]:lizhangqu/LeakTracer.git在项目src/main/cpp......
  • protobuf使用(一)android ndk 编译 protobuf-3.6.x windows
    首先建议大家看好版本,环境,有可能因为小的变化会造成编译有问题: 我的环境是PC OS:windows10(没办法暂时没机器);NDK:android-ndk-r17b-windows-x86_64ProtoBuf:protobuf-3.6.x  下载链接:https://github.com/protocolbuffers/protobuf/tree/3.6.x代码生成工具:protoc-3.6.1-wi......
  • 使用eclipse开发ndk之:导入现有的…
    网上有很多NDK开发的例子,拿来二次开发很好。eclipse是功能强大的IDE开发环境,如果能将这些NDK工程导入可以加快进度。网上查了很久,没有具体的导入方法。通过自己摸索,终于找到了正确的导入办法。1,假设eclipse,jdk,androidSDK,androidNDK,CDT都安装并设置好了。2,在eclipse新建工程......
  • 用C/C++在Linux和Android NDK中获取设备的IP地址
    C/C++开发的获取设备IP地址的代码,下面链接中的版本是在Linuxx86-64环境中编译(Centos7.5)的,也可在其它版本的Linux中或者AndroidNDK('armeabi-v7a','arm64-v8a','x86','x86_64'等版本)中编译。下载地址(此版本须在Linuxx86-64环境中运行):金山文档https://kdocs.cn/l/cd4VM3e......
  • opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization e
    原因:node版本与openssl不兼容导致的初始化失败 解决:windows执行:setNODE_OPTIONS=--openssl-legacy-providermac执行:exportNODE_OPTIONS=--openssl-legacy-provider......
  • CentOS7 升级openssl版本(升级至3.0.3)
    首先查看本地openssl版本opensslversion创建一个放源码的目录(按自己习惯)#这里是我的习惯cd/usr/local/src#去官网获取你想要版本的tar压缩包如果没有wget命令,自行百度wget--no-check-certificatehttps://www.openssl.org/source/old/3.0/openssl-3.0.3.tar......
  • telnet远程管理linux主机及Zlib、openssl、openssh升级1
    一、telent远程管理主机1.安装telent服务服务端:yuminstalltelnet-server-y#安装服务端useradddaipasswddai#创建lhj用户,设置lhj密码,密码有规则要求,大小写数字加符号,输2次即可客户端:yuminstalltelnet-y#安装客户端2.测试telent登录客户端:telnet192.......
  • OpenSSL s_client测试子命令
    载第三方的最新的PEM(privacy-enhancedmail)格式的可信证书库wget--no-check-certificatehttps://curl.haxx.se/ca/cacert.pemopenssls_client-CAfilecacert.pem-connectwww.baidu.com:443-msg显示证书链openssls_client-CAfilecacert.pem-connectwww.baid......
  • 【转】检查Linux系统下是否安装了gcc、pcre、zlib、openssl环境
    1.查看gcc环境gcc-v如果Linux系统没有安装gcc编译器,会提示“Commandnotfound”。如果系统上安装了gcc编译器,这条命令就会显示出当前安装的gcc编译器是哪个版本。下图展示为已安装的信息。 2. 查看pcre环境rpm-qapcre看到pcre的版本,说明已安装,否则未安装。......