openharmony_3.1 编译第三方库-鸿蒙开发者社区-51CTO.COM

openharmony_3.1 编译第三方库

小小团子
发布于 2023-3-31 16:13
浏览
1收藏

cmake 编译BehaviorTree项目为例,下载BehaviorTreeopenharmony/third_party目录

1、启动openharmony容器编译sdk

docker run -it -v $(pwd):/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:1.0.0
./build.sh --product-name ohos-sdk –ccache
# sdk生成目录/home/openharmony/out/sdk/packages/ohos-sdk/linux/native

2、cmake 编译项目

cd /home/openharmony/third_party/BehaviorTree.CPP/
mkdir build && cd build 
/home/openharmony/out/sdk/packages/ohos-sdk/linux/native/build-tools/cmake/bin/cmake  -DOHOS_ARCH=armeabi-v7a -DCMAKE_TOOLCHAIN_FILE=/home/openharmony/out/sdk/packages/ohos-sdk/linux/native/build/cmake/ohos.toolchain.cmake  .. -L  
# 如果需要编译静态库则需要设置 cmake 变量 -DBUILD_SHARED_LIBS=OFF
# 可以通过-DCMAKE_INSTALL_PREFIX=xxx 设置库的安装目录
# 编译 arm32 -DOHOS_ARCH=armeabi-v7a

!!! 注意这里执行的 cmake 是 SDK 内的 cmake ,不是你自己系统上原有的 cmake 。包括 toolchain file 也是 SDK 内的。执行 make 即可

3、非cmake编译

方法1:我们可以使用 cmake 构建脚本重写开源库的构建过程

这种方法需要分析源库的构建脚本或者分析源库的编译构建日志,我这里推荐简单点的分析构建日志(可以不必去学习 configure 的语法)。很多库为了性能一般会对代码进行处理器级的优化(SIMD: SSE,AVX; NEON),因此编译构建日志最好采用交叉编译工具链的日志,不要盲目的根据 x86_64 的构建日志进行翻译(cmake)。如果使用此方法请参考 oh 三方库 cmake 编写指导编写规范

方法2:使用项目原生的构建工具例如 configure、makefile

如何使用原生的构建工具?首先我们需要知道构建脚本并不是直接调用 gcc 或者 clang 编译工具链的。而是优先调用 CC 环境变量以达到调用 c 编译器的目的,对应的 CXX 环境变量对应 c++ 编译器…。等等一系列的编译工具都有自己对应的环境变量。通过设置这些环境变量,让构建工具使用 ohos SDK 的编译工具链。

设置 ohos 64bit 库编译工具链环境变量

#aarch64-linux-ohos
export OHOS_SDK=/home/ohos/tools/OH_NDK/ohos-sdk/linux # 此处是我的ohos_sdk解压目录,请替换为你自己的解压目录
export AS=${OHOS_SDK}/native/llvm/bin/llvm-as
export CC="${OHOS_SDK}/native/llvm/bin/clang --target=aarch64-linux-ohos"
export CXX="${OHOS_SDK}/native/llvm/bin/clang++ --target=aarch64-linux-ohos"
export LD="${OHOS_SDK}/native/llvm/bin/lld --target=aarch64-linux-ohos"
export STRIP=${OHOS_SDK}/native/llvm/bin/llvm-strip
export RANLIB=${OHOS_SDK}/native/llvm/bin/llvm-ranlib
export OBJDUMP=${OHOS_SDK}/native/llvm/bin/llvm-objdump
export OBJCOPY=${OHOS_SDK}/native/llvm/bin/llvm-objcopy
export NM=${OHOS_SDK}/native/llvm/bin/llvm-nm
export AR=${OHOS_SDK}/native/llvm/bin/llvm-ar
export CFLAGS="-fPIC -D__MUSL__=1"
export CXXFLAGS="-fPIC -D__MUSL__=1"

设置 ohos 32bit 库编译工具链环境变量

linux-arm
export OHOS_SDK=/home/ohos/tools/OH_NDK/ohos-sdk/linux # 此处是我的ohos_sdk解压目录,请替换为你自己的解压目录
export AS=${OHOS_SDK}/native/llvm/bin/llvm-as
export CC="${OHOS_SDK}/native/llvm/bin/clang --target=arm-linux-ohos"
export CXX="${OHOS_SDK}/native/llvm/bin/clang++ --target=arm-linux-ohos"
export LD="${OHOS_SDK}/native/llvm/bin/lld --target=arm-linux-ohos"
export STRIP=${OHOS_SDK}/native/llvm/bin/llvm-strip
export RANLIB=${OHOS_SDK}/native/llvm/bin/llvm-ranlib
export OBJDUMP=${OHOS_SDK}/native/llvm/bin/llvm-objdump
export OBJCOPY=${OHOS_SDK}/native/llvm/bin/llvm-objcopy
export NM=${OHOS_SDK}/native/llvm/bin/llvm-nm
export AR=${OHOS_SDK}/native/llvm/bin/llvm-ar
export CFLAGS="-fPIC -march=armv7a -D__MUSL__=1"
export CXXFLAGS="-fPIC -march=armv7a -D__MUSL__=1"

编译

make

分类
已于2023-3-31 16:14:42修改
1
收藏 1
回复
举报
3条回复
按时间正序
/
按时间倒序
mb641bf150447e6
mb641bf150447e6

这个是说使用鸿蒙的编译工具,然后编译第三方移植过来的库吗?编译后的结果是什么?

回复
2023-4-7 16:23:25
小小团子
小小团子

这个使openharmony的cmake工具,编译生成so文件了

回复
2023-4-20 20:39:49
wx657d0d8ade750
wx657d0d8ade750

使用这种方式编译GmSSL-v2版本会提示源码中有错误信息  但是使用Android NDK 编译的时候是成功的 没有提示任何错误 



回复
2023-12-25 16:04:08
回复
    相关推荐