AliOS编译三方库

1、官网教程

AliOS开发官网链接:AliOS开发者官网
在这里插入图片描述
应用开发下NDK开发有相关NDK开发介绍

2、编译NDK

2.1 下载ndk

在这里插入图片描述
首先,下载ndk

2.2 编译环境准备

  • 安装make
sudo apt install make
  • 安装nodejs
sudo apt install nodejs
# 查看nodejs是否安装成功,查看版本
node -v
  • 安装npm
sudo apt install npm
#查看npm是否安装成功,查看版本
npm -v

2.3 安装ndk

在这里插入图片描述首先将ndk拷贝到服务器中,这里准备将ndk解压到aliNDK中

tar -zxvf alios-ivi-ndk-linux*.tar.gz -C ./aliDNK/

使用tar命令解压,并指定解压目录
在这里插入图片描述
解压后目录结构如图所示,然后执行安装

# 导入环境变量
export NDK_ROOT=/home/xy/code/aliosndk/
# 安装yndk
sudo npm install -g ./ali-yndk-build-2.9.8.tgz
# 测试yndk
yndk-build --help
# 安装make toolchain
npm install -g $NDK_ROOT/toolchains/ali-make_standalone_toolchain*.tgz
# 测试make toolchain
make_standalone_toolchain -h

3 cmake交叉编译

以expat三方库为例

3.1 编译工具链

首先创建交叉编译工具链

make_standalone_toolchain \
  --arch arm64 \
  --stl gnustdc++ \
  --api 5 \
  --install-dir aarch64-toolchain \
  --force

其中api可以指定为对应的api级别。也可以通过–install-dir指定安装目录
在这里插入图片描述

export TOOLCHAIN_ROOT=`pwd`/aarch64-toolchain

导出环境变量,该环境变量会在交叉编译时使用

3.2 编译三方库

下载expat源码expat

# 解压源码
tar -zxvf expat-2.5.0.tar.gz -C .

在这里插入图片描述
源码解压后,存在CMakeLists.txt,可以通过cmake编译
编写配置文件yunos_ndk_aarch64.cmake

SET(CMAKE_SYSTEM_NAME Linux)
# specify the cross compiler
SET(CMAKE_C_COMPILER   $ENV{TOOLCHAIN_ROOT}/bin/aarch64-linux-gnueabi-gcc)
SET(CMAKE_CXX_COMPILER $ENV{TOOLCHAIN_ROOT}/bin/aarch64-linux-gnueabi-g++)
# where is the target environment
SET(CMAKE_FIND_ROOT_PATH  $ENV{TOOLCHAIN_ROOT}/sysroot)
# never search for programs in the build host directories
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# for libraries and headers in the target directories
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
# set rpath after run `make all install`
SET(CMAKE_INSTALL_RPATH $ORIGIN)

这里的TOOLCHAIN_ROOT是上面导出的环境变量,指向了编译后的ndk路径
CMAKE_FIND_ROOT_PATH指示,编译依赖文件的根路径,可以设置成默认的。如果自己设置了sysroot,可以在这里面添加
配置文件完成之后可以执行文件编译。目前在代码根目录

mkdir out && cd out
cmake -DCMAKE_TOOLCHAIN_FILE=../yunos_ndk_aarch64.cmake -DCMAKE_INSTALL_PREFIX=./install ../
make && make install

CMAKE_INSTALL_PREFIX环境变量定义cmake执行make install命令时的安装路径。目前就是安装在out/install目录下的
编译后的文件如下:
在这里插入图片描述
包含可执行文件,动态库和头文件等

4 自带编译配置文件的交叉编译

这里以openssl为例
下载源码并解压

tar -zxvf openssl-3.2.0.tar.gz -C ./

修改crypto/getenv.c源码

char *ossl_safe_getenv(const char *name)
{
#ifndef YUNOS_NDK  // 当 YUNOS_NDK 有定义时,跳过 secure_getenv的使用
  #if defined(__GLIBC__) && defined(__GLIBC_PREREQ)
  # if __GLIBC_PREREQ(2, 17)
  #  define SECURE_GETENV
      return secure_getenv(name);
  # endif
  #endif
#endif  // end of #ifndef YUNOS_NDK
#ifndef SECURE_GETENV
    if (OPENSSL_issetugid())
        return NULL;
    return getenv(name);
#endif
}

原因是 NDK glibc 并不支持 secure_getenv 这类 GNU 扩展的 API。所以需要在代码中避免使用这类 API。如果版本有差异,则只需要修改secure_getenv调用部分代码就可以
然后执行编译

TOOL=aarch64-linux-gnueabi && CFLAGS="-fPIC -DYUNOS_NDK"
mkdir out && cd out
../Configure  no-async linux-aarch64 shared --prefix=./install --openssldir=$INSTALL_DIR/openssl --cross-compile-prefix=${TOOLCHAIN_ROOT}/bin/${TOOL}- ${CFLAGS}
make && make install

执行完成之后,在out/install目录下生成相应文件
在这里插入图片描述

  • 20
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值