yang131

导航

关于鸿蒙交叉编译的日志记录

对于一个第三方库集成到自己的项目,在鸿蒙开发商最初接触的是源码集成进来,使用cmake,但是一些库的代码偏多,集成有一些困难,所以还有另一种方式直接把第三方库的链接库编译好放进来。

大部分或者目前我需要用的都需要makefile来编译,当然如果不是makefile而是CMake,那它可以直接集成到项目里

windows操作系统下的huawei deveco的sdk里面的编译器是llvm,但是一些第三方库的makefile语法是只支持linux的,所以在windows下编译需要修改编译命令以及目录,(有例子参考编译FreeImage,报错是关于不同操作系统下命令不一样导致的)

而大部分交叉编译的资料是仅支持linux的,所以这里我们需要linux环境。

通用总结:

 step 1.安装或者下载 鸿蒙的toolchain,找到sysroot和llvm的目录大概是

  OHSDK=C:\softdir\DevEco Studio\sdk\default\openharmony

  LLVM的目录: ${OHSDK}\native\llvm\bin

  SYSROOT=${OHSDK}\native\sysroot

有了以上的目录之后,最好做个环境变量,

vim ~/bash.rc

source ~/bash.rc

 step 2:然后找到对应的第三方库的makefile修改 CC -LD LDFLAGS

如果不在makefile里面修改也可以新建一个build.sh文件

demo for ffmpeg:

 1 set -x
 2 # 目标HarmonyOS版本
 3 # 编译arm64-v8a 配置CPU为aarch64
 4 # 编译armeabi-v7a 配置CPU为arm
 5 CPU=aarch64
 6 #so库输出目录
 7 OUTPUT=$(pwd)/harmonyos/$CPU
 8 OH_SDK=/home/android/ohos-sdk/linux
 9 # 编译环境
10 SYSROOT=$OH_SDK/native/sysroot
11 CC=$OH_SDK/native/llvm/bin/$CPU-linux-ohos-clang
12 STRIP=$OH_SDK/native/llvm/bin/llvm-strip
13 LD=$OH_SDK/native/llvm/bin/$CPU-linux-ohos-clang
14 OPTIMIZE_CFLAGS="-march=$CPU"
15 HOST_CC=$OH_SDK/native/llvm/bin/$CPU-linux-ohos-clang
16 HOST_LD=$OH_SDK/native/llvm/bin/$CPU-linux-ohos-clang
17 HOST_LD_FLAG=-L/home/android/ohos-sdk/linux/native/sysroot/usr/lib/$CPU-linux-ohos
18 function build
19 {
20   ./configure \
21   --prefix=$OUTPUT \
22   --target-os=linux \
23   --cpu=$CPU \
24   --disable-asm \
25   --enable-cross-compile \
26   --disable-x86asm \
27   --enable-shared \
28   --enable-static \
29   --disable-doc \
30   --disable-htmlpages \
31   --disable-optimizations \
32   --cc=$CC \
33   --ld=$LD \
34   --strip=$STRIP \
35   --sysroot=$SYSROOT \
36   --host-cc=$HOST_CC \
37   --host-ld=$HOST_LD \
38   --host-os=linux \
39   --host-ldflags=$HOST_LD_FLAG \
40   --extra-cflags="-Os -fpic" \
41   --disable-vulkan \
42   --disable-stripping
43 
44   make clean all
45 # 这里是定义用几个CPU编译
46   make -j8
47   make install
48 }
49 build

 

具体参考链接:

 https://www.jianshu.com/p/e4c34631a9f6

step 3:

 如果是修改的makefile的话,那么执行

make (一般的通用命令 make,make clean clean,具体可以看对应第三方库的readme)

 如果是上面的sh文件的话:

sudo sh ./build.sh

 

参考如下资料: 

https://developer.huawei.com/consumer/cn/doc/best-practices-V5/bpta-lycium-adapts-to-harmonyos-V5?catalogVersion=V5

 

注意:

  我是用的系统是ubuntu, 装系统的话有3种 1.双系统(台式机稳定,笔记本每次都要挂载硬盘,网络连接有问题)  2.hyper-v 目前来看支持win10,win11不知道啥情况没有这个功能,猜测和版本有关系(企业版,家庭版,专业版)3.VMWare,使用这种方式装ubuntu,中间有时候出现问题就得重装系统,要访问本地文件可以安装VMWare tools(在菜单栏可以找到),把相应的sdk文件和库文件放到共享文件目录,防止重装系统导致找不到。

  ubuntu的版本,早一点的版本gcc版本比较低,他装的python版本也比较低,如果卸载会导致连锁反应,甚至桌面都加载不上。所以注意版本,另外查看下能装哪些gcc版本。

 

    虽然资料多多,但是编译器来遇到的问题也不少,其中需要安装python3.5,glic-c的(这个需要自己下载源码来编译),目前编译成功需要保证完整的运行环境支持,所以我们优先先到gitee里找找有木有集成好的:

https://so.gitee.com/?q=openharmony

 

 后续:

FFMPEG交叉编译记录:

  ffmpeg编译会遇到一些错误,要么对其修改,gitee上的opeharmony中的tpc_c_cplusplus,其中有一个据说可以调整过的编译版本,实测后也有报错,不过这2个版本可以对比下,说不定第二个版本错误好调整一点。

其他待续。

 

 

       

 

posted on 2024-10-16 11:23  NoNight  阅读(68)  评论(0编辑  收藏  举报