linux下编译鸿蒙版curl、openssl

一.环境准备

1.参考说明

NDK开发介绍:https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/napi/ndk-development-overview.md

2.NDK下载

点击介绍页面中的链接可以跳转到相应下载页面:

下载相应版本:

下载完毕后解压到指定目录并且设置环境变量,比如:

bash 复制代码
# 解压
tar -xzvf ohos-sdk-windows_linux-public.tar.gz /home/ubuntu/develop/ohos-sdk-5.0
# 导出环境变量,后续编译脚本里面会使用这个变量
export OHOS_SDK=/home/ubuntu/develop/ohos-sdk-5.0/linux

二.编译openssl

1.修改编译配置文件,增加ohos编译配置

以openssl-1.1.1m举例,配置文件路径:openssl-1.1.1m\Configurations\10-main.conf

javascript 复制代码
    "ohos-aarch64" => {
        inherit_from     => [ "linux-aarch64" ],
        shared_extension => ".so"
    },
    "ohos-arm" => {
        inherit_from     => [ "linux-generic32" ],
        asm_arch         => 'armv4',
        perlasm_scheme   => "linux32",
        shared_extension => ".so"
    },
    "ohos-x86_64" => {
        inherit_from     => [ "linux-x86_64" ],
        shared_extension => ".so"
    },

2.使用编译脚本进行编译

编译脚本:

bash 复制代码
#!/bin/bash

if [[ -z "${OHOS_SDK}" ]]; then
    echo "OHOS_SDK is not set or is empty"
	exit 1
else
    echo "harmony ndk path ${OHOS_SDK}"
fi

file_dir_name=$(dirname "$0")
cd $file_dir_name

func_err_check()
{
    if [ $1 -ne 0 ]; then echo "exec err: $2"; exit 1; fi;
}

export OHOS_NDK_HOME=$OHOS_SDK

export CC=$OHOS_NDK_HOME/native/llvm/bin/clang
export CXX=$OHOS_NDK_HOME/native/llvm/bin/clang++
export AR=$OHOS_NDK_HOME/native/llvm/bin/llvm-ar
export AS=$OHOS_NDK_HOME/native/llvm/bin/llvm-as
export LD=$OHOS_NDK_HOME/native/llvm/bin/ld.lld
export STRIP=$OHOS_NDK_HOME/native/llvm/bin/llvm-strip
export RANLIB=$OHOS_NDK_HOME/native/llvm/bin/llvm-ranlib
export OBJDUMP=$OHOS_NDK_HOME/native/llvm/bin/llvm-objdump
export OBJCOPY=$OHOS_NDK_HOME/native/llvm/bin/llvm-objcopy
export NM=$OHOS_NDK_HOME/native/llvm/bin/llvm-nm
export CFLAGS="-target aarch64-linux-ohos --sysroot=${OHOS_NDK_HOME}/native/sysroot -D__MUSL__"
export CXXFLAGS="-target aarch64-linux-ohos --sysroot=${OHOS_NDK_HOME}/native/sysroot -D__MUSL__"

cd ../openssl-1.1.1m/
chmod +x ./Configure

./Configure no-zlib no-shared ohos-aarch64 --prefix=$PWD/../../Harmony_aarch64
func_err_check $? "check ohos-aarch64 config"
make 
make install

$PWD/../../Harmony_aarch64是一个用相对路径表示的统一编译安装目录,openssl和curl都会引用以及安装到这个目录下,所以要保证两个开源库使用的编译脚本中的这个相对路径指向同一目录。如果有什么问题的话,也可以自己手动改成想要的路径,两个脚本一致就行。

三.编译curl

1.使用编译脚本进行编译

curl使用的版本是 7.81

bash 复制代码
#!/bin/bash

if [[ -z "${OHOS_SDK}" ]]; then
    echo "OHOS_SDK is not set or is empty"
	exit 1
else
    echo "harmony ndk path ${OHOS_SDK}"
fi

file_dir_name=$(dirname "$0")
cd $file_dir_name

func_err_check()
{
    if [ $1 -ne 0 ]; then echo "exec err: $2"; exit 1; fi;
}

OPENSSL_DIR_ARM64="${PWD}/../../Harmony_aarch64"

export OHOS_NDK_HOME=$OHOS_SDK

export CC=$OHOS_NDK_HOME/native/llvm/bin/clang
export CXX=$OHOS_NDK_HOME/native/llvm/bin/clang++
export AR=$OHOS_NDK_HOME/native/llvm/bin/llvm-ar
export AS=$OHOS_NDK_HOME/native/llvm/bin/llvm-as
export LD=$OHOS_NDK_HOME/native/llvm/bin/ld.lld
export STRIP=$OHOS_NDK_HOME/native/llvm/bin/llvm-strip
export RANLIB=$OHOS_NDK_HOME/native/llvm/bin/llvm-ranlib
export OBJDUMP=$OHOS_NDK_HOME/native/llvm/bin/llvm-objdump
export OBJCOPY=$OHOS_NDK_HOME/native/llvm/bin/llvm-objcopy
export NM=$OHOS_NDK_HOME/native/llvm/bin/llvm-nm
export CFLAGS="-target aarch64-linux-ohos --sysroot=${OHOS_NDK_HOME}/native/sysroot -D__MUSL__"
export CXXFLAGS="-target aarch64-linux-ohos --sysroot=${OHOS_NDK_HOME}/native/sysroot -D__MUSL__"

cd ../curl-7.81.0/
chmod +x ./configure

./configure --host aarch64-linux-android --disable-rtsp --without-zlib --with-pic --disable-shared --disable-dependency-tracking --with-openssl="${OPENSSL_DIR_ARM64}" --prefix=$PWD/../../Harmony_aarch64
func_err_check $? "check ohos-aarch64 config"
make 
make install

四.编译结果

如果中间没有错误的话,在 xxx/Harmony_aarch64/lib下会生成以下文件和文件夹

目前我编译的全部都是静态库,如果需要编译动态库的话,还需要调整下编译脚本中的参数。具体的参数可以查看openssl和curl的编译说明。

相关推荐
天若有情67312 分钟前
循环条件隐藏陷阱:我发现了「同循环双条件竞态问题」
c++·学习·算法·编程范式·while循环··竞态
Justin在掘金16 分钟前
鸿蒙端 SDK 创建、单元测试、发布与依赖完整指南
harmonyos
是梦终空1161 小时前
C++中的职责链模式变体
开发语言·c++·算法
mjhcsp1 小时前
C++遗传算法(Genetic Algorithm,GA):进化式全局优化的核心解析
开发语言·c++
仰泳的熊猫1 小时前
题目2270:蓝桥杯2016年第七届真题-四平方和
c++·算法·蓝桥杯
小雨青年2 小时前
鸿蒙 HarmonyOS 6 | 混合开发 (01) Web 组件内核——ArkWeb 加载机制与 Cookie 管理
前端·华为·harmonyos
Aaswk2 小时前
蓝桥杯2025年第十六届省赛真题(更新中)
c语言·数据结构·c++·算法·职场和发展·蓝桥杯
王老师青少年编程2 小时前
信奥赛C++提高组csp-s之数论基础专题课:欧拉函数和欧拉定理2(编程案例实践)
c++·数论·欧拉函数·信奥赛·欧拉定理·csp-s·提高组
总斯霖3 小时前
P15445永远在一起!题解(月赛T2)
数据结构·c++·算法·深度优先
Yupureki3 小时前
《C++实战项目-高并发内存池》4.CentralCache构造
c语言·开发语言·c++·单例模式·github