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

相关推荐
行者-全栈开发3 小时前
【共创稿事节】HarmonyOS 7 空间音频实战:用 AudioSpatializationManager 构建“听得见方位“的声场
harmonyos·arkts·鸿蒙·空间音频·api 26·audio kit
马剑威(威哥爱编程)3 小时前
【共创稿事节】HarmonyOS 7 Agent 开发实战 03:Tool Calling 让 AI 查实时订单与库存
华为·harmonyos
倔强的石头1065 小时前
把 Typst 搬上开源鸿蒙 PC:一次“干净”的移植记录
华为·开源·harmonyos
梦想不只是梦与想7 小时前
鸿蒙 预览数据模拟:Hamock
harmonyos·模拟数据·hamock
贾伟康10 小时前
【化学实验室|04】HarmonyOS ArkTS 场景选择器实战:让 13 个离线实验的入口、筛选和返回路径保持一致
harmonyos·arkts·canvas·arkui·化学实验
特立独行的猫a11 小时前
仓颉语言GUI开发实战:用仓颉写串口/网络二合一调试助手
网络·ui·gui·harmonyos·tauri·仓颉
hqzing20 小时前
把 glibc 移植到鸿蒙 PC 上:它能用来做什么
华为·harmonyos
OH_TPC1 天前
HarmonyOS APP开发---“习惯猫“习惯打卡App,需要用到这个库
华为·harmonyos·鸿蒙
熊猫钓鱼>_>1 天前
开源鸿蒙平台 KMP 三方库 kotlin-csv 适配全流程:从编码假设到沙箱真机互通验证
开发语言·人工智能·华为·kotlin·harmonyos·鸿蒙
马剑威(威哥爱编程)1 天前
【共创稿事节】HarmonyOS 7 Agent 开发实战 09:Agent 测试评测集
华为·harmonyos