首页 > 其他分享 >Android开发编译curl库给Android使用

Android开发编译curl库给Android使用

时间:2024-10-14 12:32:24浏览次数:1  
标签:bin TOOLCHAIN -- 编译 export linux Android curl

Android开发编译curl库给Android使用

  1. 编译zlib库

官网:http://zlib.net/
解决后面出现的error: --with-openssl was given but OpenSSL could not be detected

export ANDROID_NDK_HOME=/home/ubuntu20/Android/Sdk/ndk/21.4.7075529
export TOOLCHAIN=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64
export AR=$TOOLCHAIN/bin/llvm-ar
export AS=$TOOLCHAIN/bin/llvm-as
export CC=$TOOLCHAIN/bin/aarch64-linux-android21-clang
export CXX=$TOOLCHAIN/bin/aarch64-linux-android21-clang++
export LD=$TOOLCHAIN/bin/ld
export RANLIB=$TOOLCHAIN/bin/llvm-ranlib
export STRIP=$TOOLCHAIN/bin/llvm-strip

wget http://zlib.net/zlib-1.3.1.tar.gz
tar -zxvf zlib-1.3.1.tar.gz
cd zlib-1.3.1
mkdir build_out
./configure --prefix=/home/ubuntu20/documents/zlib-1.3.1/build_out 
make clean 
make 
make install
  1. 编译openssl库

官网:https://openssl-library.org/source/

export ANDROID_NDK_ROOT=/home/ubuntu20/Android/Sdk/ndk/21.4.7075529
PATH=$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin:$ANDROID_NDK_ROOT/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin:$PATH

wget https://github.com/openssl/openssl/releases/download/openssl-3.3.2/openssl-3.3.2.tar.gz
tar -zxvf openssl-3.3.2.tar.gz
cd openssl-3.3.2
mkdir build_out
./Configure android-arm64 no-unit-test -D__ANDROID_API__=21 --prefix=/home/ubuntu20/documents/openssl-3.3.2/build_out
#32位使用./Configure android-arm no-unit-test -D__ANDROID_API__=21 --prefix=/home/ubuntu20/documents/openssl-3.3.2/build_out
make clean 
make 
make install
  1. 编译psl库,

如果不想使用这个库,编译curl的时候传递--without-libpsl
如果要使用这个库,编译curl的时候传递--with-libpsl=/home/ubuntu20/documents/libpsl-0.21.5/build 指定libpsl库pkgconfig路径

官网:https://www.linuxfromscratch.org/blfs/view/svn/basicnet/libpsl.html
Github地址:https://github.com/rockdaboot/libpsl

编译psl库我使用了官网说的meson和ninjia编译,有一点点麻烦,只要是android交叉编译要指定--cross-file cross_file.txt
cross_file.txt内容要指定[host_machine]部分

[host_machine]
system = 'aarch64-linux-android'
cpu_family = 'aarch64'
cpu = 'aarch64'
endian = 'little'
wget https://github.com/rockdaboot/libpsl/releases/download/0.21.5/libpsl-0.21.5.tar.gz
tar -zxvf libpsl-0.21.5.tar.gz
cd libpsl-0.21.5
mkdir build_out
meson setup --prefix=/home/ubuntu20/documents/libpsl-0.21.5/build_out --buildtype=release --cross-file cross_file.txt
ninja	//找到Android sdk下的ninjia,/home/ubuntu20/Android/Sdk/cmake/3.22.1/bin/ninja
ninja install	
  1. 编译curl库

官网:https://curl.se/docs/install.html
Github地址:https://github.com/curl/curl

export ANDROID_NDK_HOME=/home/ubuntu20/Android/Sdk/ndk/21.4.7075529
export TOOLCHAIN=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64
export AR=$TOOLCHAIN/bin/llvm-ar
export AS=$TOOLCHAIN/bin/llvm-as
export CC=$TOOLCHAIN/bin/aarch64-linux-android21-clang
export CXX=$TOOLCHAIN/bin/aarch64-linux-android21-clang++
export LD=$TOOLCHAIN/bin/ld
export RANLIB=$TOOLCHAIN/bin/llvm-ranlib
export STRIP=$TOOLCHAIN/bin/llvm-strip

wget https://github.com/curl/curl/releases/download/curl-8_10_0/curl-8.10.0.tar.gz
tar curl-8.10.0.tar.gz
cd curl-8.10.0
mkdir build_out
//官网也没提高编译android动态库的指令,估计curl编译不了Android下的动态库,只能编译出静态库
//如果不使用libpsl,则--with-libpsl=xxx改为--without-libpsl,才能配置成功
//编译32位的话使用--host=armv7a-linux-androideabi
./configure --host=aarch64-linux-android --prefix=/home/ubuntu20/documents/curl/curl-8.10.0/build_out --with-zlib=/home/ubuntu20/documents/zlib-1.3.1/build_out --with-openssl=/home/ubuntu20/documents/openssl-3.3.2/build_out --with-libpsl=/home/ubuntu20/documents/libpsl-0.21.5/build_out --with-pic --disable-shared --enable-static
make clean 
make 
make install

Android常用架构以及架构名称

aarch64-linux-android 		arm64-v8a 		android-arm64			//arm64位
armv7a-linux-androideabi 	armeabi-v7a     	android-arm			//arm32位
i686-linux-android 		x86 			android-x86			//x86 32位
x86_64-linux-android 		x86_64 			android-x86_64			//x86 64位

标签:bin,TOOLCHAIN,--,编译,export,linux,Android,curl
From: https://www.cnblogs.com/yongfengnice/p/18463856

相关文章

  • Android中的ConstrainLayout的用法(上)
    Android中的ConstraintLayout(约束布局)是一种灵活的布局方式,它允许开发者通过定义视图之间的相对位置来创建复杂的用户界面。以下是对ConstraintLayout的详细解释:一、基本介绍ConstraintLayout是在2016年GoogleI/O大会上发布的布局方式,旨在解决复杂的页面层级嵌套过多的问题......
  • c实现编译时检测结构体大小
    静态断言(_Static_assert)是在C11标准中引入的,它允许在编译时检查某些条件是否为真。如果条件为假,则编译器会报错。通过下面这段代码的目的是兼容C11标准之前的编译器,它定义了一个宏STATIC_ASSERT,用来在编译时检查条件COND是否为真。如果COND为假,则编译器会报错,错误信息为MSG。 ......
  • linux kernel编译
    编译x86的kernelexportARCH=x86_64exportCROSS_COMPILE=x86_64-linux-gnu-makedefconfigmake-j32中间出现了libelf.h找不到,sudoapt-getinstalllibelf-devbc解决。编译aarch64的kernelexportARCH=x86_64exportCROSS_COMPILE=x86_64-linux-gnu-makedefconfig......
  • sqlite 源码编译,并写一个 sqlite_demo程序。
    环境介绍:ubuntu系统cmake(cmake安装) (可以手动下载源码,编译安装,也可以使用系统最新的cmake安装)  一、下载源码并编译https://github.com/sqlite/sqlite/tree/vesion-3.45.1下载3.45.1的源码 sqlite-vesion-3.45.1.zip 解压 sqlite-vesion-3.45.1到当前目......
  • Android 车载应用开发指南 - CAN Bus 协议详解
    ​在现代车载应用开发中,CAN(ControllerAreaNetwork)总线协议扮演着不可或缺的角色。作为一个汽车内部网络的标准协议,CANBus已经成为了车载系统通信的基础。而在Android车载应用开发的过程中,理解并利用好CANBus协议是必不可少的。那么,CANBus到底是什么?它又是如何在车载......
  • 包解决!Android Studio报错:Duplicate class kotlin.collections.jdk8.CollectionsJDK8K
    Executionfailedfortask':app:checkDebugDuplicateClasses'.>Afailureoccurredwhileexecutingcom.android.build.gradle.internal.tasks.CheckDuplicatesRunnable>Duplicateclasskotlin.collections.jdk8.CollectionsJDK8Ktfoundinmodul......
  • Android15车载音频之Virtualbox中QACT实时调试(八十八)
    简介:CSDN博客专家、《Android系统多媒体进阶实战》一书作者新书发布:《Android系统多媒体进阶实战》......
  • Android12.0 需求开发篇+问题解决篇之IPC socket通信
    1.需求描述        应用组C程序客户端和Android系统层Java服务端进行通信需求,这里其实在Android系统下IPC的方式有很多,像Binder作为Android特有的跨进程通信,但是应用组的同事之前是非Android系统下进行应用开发,使用的都是socket这种通用IPC通信。这里为兼容应用组代码......
  • ORB_SLAM2 编译失败报错
    编译前,对部分包的要求:Pangolin==0.5Eigen>=3.1.0(可安装3.1.0)OpenCV3==3.x.x(可安装3.4.15)通常,Eigen直接在终端使用apt-get安装libeigen3-dev即可Pangolin最好是不要直接安装最新的版本,否则在编译过程中会出现/usr/lib/ldcannotfindlEigen3::Eigen的错误......
  • 基于Android的家庭理财管理和实现---附源码57138
    摘 要随着经济的发展和人们生活水平的提高,家庭理财管理变得愈发重要。然而,许多家庭对于如何有效地管理个人财务以及制定预算计划感到困惑。因此,本研究旨在提供一种简单、易用且功能全面的家庭理财管理工具。本论文旨在设计和开发一款基于Android平台的家庭理财管理APP。......