Ubuntu环境下编译鸿蒙动态库
本文介绍了在Windows环境下通过VMware虚拟机安装Ubuntu 24.04系统,并配置鸿蒙命令行工具(Command-line-tools)进行开发的具体步骤。主要内容包括:1)下载并解压鸿蒙工具至/opt/ohos目录;2)配置环境变量PATH和OHOS_SDK_HOME;3)以编译libusb为例,详细说明了如何安装autoreconf工具、设置编译环境变量(CC、CFLAGS等),以
环境:
windows环境下的vmware,安装x86架构的ubuntu 24.04系统
下载鸿蒙command-line-tools
https://developer.huawei.com/consumer/cn/download/command-line-tools-for-hmos

解压后需要记住目录,此处以/opt/ohos目录为例
解压后command-line-tools为目录名,如果名为commandline-tools-linux-x64-6.0.2.642等带系统版本后缀,需要进入下一级目录,剪切comman-line-tools到/opt/ohos目录,形成目录路径
/opt/ohos/command-line-tools/bin/和/opt/ohos/command-line-tools/sdk/default/openharmony/native/llvm/bin/
ubuntu中需要将/opt/ohos/command-line-tools/bin/添加到PATH,可以在~/.profile添加两行
export OHOS_SDK_HOME=/opt/ohos/command-line-tools/sdk/default/openharmony
export PATH=/opt/ohos/command-line-tools/bin:$PATH
其中export OHOS_SDK_HOME并不一定需要,此处添加只是为了方便使用$OHOS_SDK_HOME代替路径。
然后就可以进行编译了,
参考编译方式:
cmake:
https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-cmake-adapts-to-harmonyos
make:
https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-make-adapts-to-harmonyos
configure:
https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-configure-adapts-to-harmonyos
此处以编译libusb为例:
configure编译方式需要安装autoreconf工具
sudo apt-get install autoconf automake libtool
有些旧版本的ubuntu系统,如果安装失败,需要先执行apt update
github找到libusb源码后下载,解压后进入libusb-master目录(也就是configure.ac的同级目录)
autoreconf -i -f -v
然后就是执行configure了,但是需要配置通过鸿蒙的sdk中的clang编译。为方便后续复用,此处将其封装为环境变量
# ~/.profile中已添加如下两行
export OHOS_SDK_HOME=/opt/ohos/command-line-tools/sdk/default/openharmony
export PATH=/opt/ohos/command-line-tools/bin:$PATH
# 新设置的变量,最终调用./configure的时候用,只是为了方便,并不一定非要这么做
# 设置目标架构和sysroot路径
export SYSROOT=$OHOS_SDK_HOME/native/sysroot
# 设置编译器
# clang需要--target参数,这里与./configure的--host参数还不一样
export CC="$OHOS_SDK_HOME/native/llvm/bin/clang --target=aarch64-linux-ohos"
# 设置编译和链接标志
export CFLAGS="--sysroot=$SYSROOT -O2 -D__MUSL__"
export CPPFLAGS="--sysroot=$SYSROOT -D__MUSL__"
export LDFLAGS="--sysroot=$SYSROOT"
除了PATH以外,不设置以上环境变量也可以。然后调用configure
./configure --host=aarch64-unknown-linux-musl \
--build=x86_64-linux-gnu \
--prefix=$PWD/install \
--disable-udev \
--enable-shared \
--disable-static \
CC="$CC" \
CFLAGS="$CFLAGS" \
CPPFLAGS="$CPPFLAGS" \
LDFLAGS="$LDFLAGS"
这里的--host参数是aarch64-unknown-linux-musl并不是aarch64-linux-ohos。因为configure.ac中配置的host并不支持aarch64-linux-ohos
然后调用make即可
注意:
注意:
注意:
直接再鸿蒙编译环境引用这个动态库是会直接崩溃,哪怕不调用其中任何一个函数。
参考:
https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs/faqs-ndk-36
解决方案:
编译出来的动态库是libusb-1.0.so.0.3.0,改名为libusb-1.0.so.0。不能改名为libusb-1.0.so.3
更多推荐



所有评论(0)