Windows下为OpenHarmony交叉编译libusb

开发OpenHarmony下的USB设备驱动,需要使用libusb库,所以进行编译,记录编译步骤。

文章写于2026年8月,若后续开发环境、代码版本等有更新,以最新的为准。

1、安装开发环境

安装华为开发环境DevEcoStudio,并在设置-->OpenHarmony SDK中安装所需的API版本(如果只是开发HarmonyOS,则无需额外安装OpenHarmony SDK,安装环境已默认安装)

2、获取代码

获取libusb代码,由于我使用CMake,所以下载的是libusb-cmake,使用如下Git命令

git clone https://github.com/libusb/libusb-cmake.git

我目前拉取的libusb版本号是1.0.30

3、修改CMakeList.txt

由于我2026.08.14拉取的代码,其CMakeList.txt尚未支持鸿蒙,所以执行CMake时会报错 CMakeList.txt 421 Unsupported target platform: OHOS

所以我自己分析、判断、摸索,再请教AI,对CMakeList.txt做了补充。是参考Linux平台分支的写法,做一些调整。

修改的内容如下(以我拉取时的CMakeList.txt行号为例):

1)、在第419行list(APPEND LIBUSB_PC_LIBS_PRIVATE -pthread -lembind -sASYNCIFY)的内容后面,亦即elseif(EMSCRIPTEN)平台代码段和未识别平台走的else()代码段之间,加入以下鸿蒙平台的内容

复制代码
    elseif(CMAKE_SYSTEM_NAME STREQUAL "OHOS")
        target_sources(usb-1.0 PRIVATE
            "${LIBUSB_ROOT}/os/linux_netlink.c"
            "${LIBUSB_ROOT}/os/linux_usbfs.c"
            "${LIBUSB_ROOT}/os/linux_usbfs.h"
        )
        find_package(Threads REQUIRED)
        list(APPEND LIBUSB_PRIVATE_LINK_LIBRARIES Threads::Threads)
        if(CMAKE_THREAD_LIBS_INIT)
            list(APPEND LIBUSB_PC_LIBS_PRIVATE "${CMAKE_THREAD_LIBS_INIT}")
        endif()
        if(NOT LIBUSB_BUILD_SHARED_LIBS)
            set(LIBUSB_CONFIG_NEEDS_THREADS ON)
        endif()

2)、在第82行if(CMAKE_SYSTEM_NAME MATCHES "Linux" OR ANDROID)的地方,加上鸿蒙的内容,改为

复制代码
if(CMAKE_SYSTEM_NAME MATCHES "Linux" OR ANDROID OR CMAKE_SYSTEM_NAME STREQUAL "OHOS")

改完之后这部分的代码段是如下

复制代码
if(CMAKE_SYSTEM_NAME MATCHES "Linux" OR ANDROID OR CMAKE_SYSTEM_NAME STREQUAL "OHOS")
    check_include_files(asm/types.h      HAVE_ASM_TYPES_H)
    check_function_exists(pthread_setname_np HAVE_PTHREAD_SETNAME_NP)
endif()
4、执行CMake

确认鸿蒙SDK的路径,比如我安装时选的是C:\HuaweiDevelop\23,并确认工具链ohos.toolchain.cmake,以及SDK带的cmake、ninja的目录。

打开命令行,到libusb-cmake目录,执行类似如下CMake命令:

C:\HuaweiDevelop\23\native\build-tools\cmake\bin\cmake -G Ninja -B out -DCMAKE_TOOLCHAIN_FILE=C:\HuaweiDevelop\23\native\build\cmake\ohos.toolchain.cmake -DCMAKE_MAKE_PROGRAM=C:\HuaweiDevelop\23\native\build-tools\cmake\bin\ninja.exe -DOHOS_ARCH=arm64-v8a -DCMAKE_BUILD_TYPE=RelWithDebInfo

其中out是CMake和编译输出的目录,可自定义

DOHOS_ARCH=arm64-v8a是编译的目标平台,可按需设置

DCMAKE_BUILD_TYPE=RelWithDebInfo是编译选项,可按需设置Debug、Release等

编译配置缺省是默认编静态库,而项目的CMake文件中有如下片段

复制代码
if(LIBUSB_BUILD_SHARED_LIBS)
    add_library(usb-1.0 SHARED)
else()
    add_library(usb-1.0 STATIC)
endif()

以及

复制代码
if(BUILD_SHARED_LIBS)
    set(LIBUSB_BUILD_SHARED_LIBS_DEFAULT ON)
else()
    set(LIBUSB_BUILD_SHARED_LIBS_DEFAULT OFF)
endif()

所以如果需要编译动态库,则在CMake命令中加上 -DLIBUSB_BUILD_SHARED_LIBS=ON

或者加上 -DBUILD_SHARED_LIBS=ON

之后等待CMake完成

5、编译

在命令行中继续执行如下命令

C:\HuaweiDevelop\23\native\build-tools\cmake\bin\cmake --build out

等待编译完成

应该会在out目录下看到libusb-1.0.a,或者libusb-1.0.so,就是生成的库文件

6、按需编译examples测试程序

如果需要编译libusb自带的测试程序,则在CMake命令中加入-DLIBUSB_BUILD_EXAMPLES=ON

编译后会在输出目录的examples文件夹下得到listdevs等文件

参考文章:

libusb移植到HarmoneyOS总结-华为开发者论坛

Windows上使用OpenHarmony SDK交叉编译指导

libusb交叉编译-CSDN博客

鸿蒙编译libusb-51CTO博客

鸿蒙6.0应用开发进阶:三方库交叉编译全流程实战解析-百度开发者中心

OpenHarmony交叉编译环境配置

相关推荐
m0_749690236 小时前
【寻迹校园 HarmonyOS NEXT 实战 06】共享权威词表:让发布表单与首页筛选使用同一套分类
harmonyos·arkts·数据建模·软件架构·arkui
独守一片天7 小时前
鸿蒙新生态服务卡片设计与状态同步
华为·harmonyos
m0_749690238 小时前
【寻迹校园 HarmonyOS NEXT 实战 07】不引入全局状态库:用 dataRevision 实现跨页面刷新
harmonyos·arkts·软件架构·状态管理·arkui
贾伟康8 小时前
【中国方言题库|01】HarmonyOS ArkTS 方言题库首页实战:组织地区入口、推荐内容和学习进度
harmonyos·arkts·arkui·多设备适配·本地数据
贾伟康10 小时前
【中国方言题库|04】HarmonyOS ArkTS 粤语分库实战:处理繁简文本、读音与练习入口
harmonyos·arkts·unicode·tts·arkui
OH_TPC10 小时前
HarmonyOS APP开发---"壁纸控"壁纸App,需要用到这个库
harmonyos
独守一片天10 小时前
鸿蒙穿戴设备与健康服务闭环
华为·harmonyos
Magic-ZYJ11 小时前
隐私优先 HarmonyOS 应用怎么设计:无账号、无后台、无统计 SDK
华为·harmonyos·鸿蒙·独立开发者·心晴手记
独守一片天11 小时前
鸿蒙车机手机协同服务生态
华为·智能手机·harmonyos
2501_9197490312 小时前
华为鸿蒙测手速APP—小羊手速
华为·harmonyos·鸿蒙