openharmony_3.1 编译第三方库
小小团子
发布于 2023-3-31 16:13
浏览
1收藏
cmake 编译BehaviorTree项目为例,下载BehaviorTree到openharmony/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
回复
相关推荐
这个是说使用鸿蒙的编译工具,然后编译第三方移植过来的库吗?编译后的结果是什么?
这个使openharmony的cmake工具,编译生成so文件了
使用这种方式编译GmSSL-v2版本会提示源码中有错误信息 但是使用Android NDK 编译的时候是成功的 没有提示任何错误