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交叉编译环境配置

相关推荐
李游Leo3 小时前
HarmonyOS 7 API 26 升级适配实战:API Change Assistant、targetSDKVersion 与兼容性回归
harmonyos
OH_TPC3 小时前
HarmonyOS APP开发---"智泊"智能停车App,需要用到这个库
harmonyos
用户117910488334 小时前
AI粘贴多行需求为什么会误执行?hmharness安全粘贴拆解 GitHub:swsgbl/hmharness
ai编程·harmonyos
用户0934077735144 小时前
HarmonyOS WPS Open SDK 实践:从 HAR 集成到 OpenFileRequest 最小闭环
typescript·harmonyos
威哥爱编程11 小时前
HarmonyOS 7 Fast Kit 算法加速实战:四大核心能力,把算力从系统里"借"出来
harmonyos·arkts
威哥爱编程11 小时前
HarmonyOS 7 游戏快启实战:Graphics Accelerate Kit 内存镜像秒级启动 + 预启动,把读条变成"秒进"
harmonyos·arkts
木子雨廷11 小时前
第 19 天|Preferences:轻量缓存与状态恢复
harmonyos
威哥爱编程11 小时前
HarmonyOS 7 精准碰一碰实战:识别触碰坐标,素材精准插入指定位置
harmonyos
二流小码农11 小时前
鸿蒙开发:ArrayList,可不会让UI更新哦
android·ios·harmonyos
威哥爱编程11 小时前
HarmonyOS 7 数字盾 2.0 实战:可信数字签名、可信 UI 确认与可信输入
harmonyos