关于鸿蒙交叉编译的日志记录
对于一个第三方库集成到自己的项目,在鸿蒙开发商最初接触的是源码集成进来,使用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
参考如下资料:
注意:
我是用的系统是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个版本可以对比下,说不定第二个版本错误好调整一点。
其他待续。