Flatpak中引入libusb-1.0遇阻?Gnome Builder开发依赖错误排查
你的问题核心出在模块构建顺序错误、libusb构建系统配置不对,以及缺少USB设备权限这几个点上,下面是具体修复步骤:
1. 调整模块构建顺序
Flatpak严格按照modules数组的顺序依次构建组件,你把自己的应用app1放在了libusb-1.0前面,导致构建应用时libusb还未编译安装,自然找不到依赖。把libusb模块移到app1前面:
"modules" : [ { "name" : "libusb-1.0", "builddir" : true, "buildsystem" : "autotools", "sources" : [ { "type" : "archive", "url" : "https://github.com/libusb/libusb/releases/download/v1.0.27/libusb-1.0.27.tar.bz2" } ] }, { "name" : "app1", "builddir" : true, "buildsystem" : "meson", "sources" : [ { "type" : "git", "url" : "file:///home/user/projects" } ] } ]
2. 修正libusb的构建系统
你下载的libusb 1.0.27官方tar包默认采用autotools(configure/make)构建,不是cmake,所以必须把buildsystem从cmake改成autotools,这样才能正确编译安装libusb并生成pkgconfig文件,供meson识别依赖。
3. 添加USB设备权限
你的应用要控制LED灯,必须拥有USB设备访问权限,在finish-args里补充权限配置:
"finish-args" : [ "--share=network", "--share=ipc", "--socket=fallback-x11", "--device=dri", "--socket=wayland", "--device=all" // 允许访问所有USB设备,也可指定特定VID/PID提升安全性 ]
如果知道LED设备的VID和PID,可以用更严格的规则,比如--usb-device=0x1234:0x5678替换--device=all。
4. 调整cleanup规则(可选)
你的全局cleanup规则删除了/lib/pkgconfig和/share/pkgconfig,这会删掉libusb安装的依赖配置文件,导致meson后续可能无法识别依赖。可以给libusb模块单独设置cleanup规则,保留pkgconfig文件:
{ "name" : "libusb-1.0", "builddir" : true, "buildsystem" : "autotools", "cleanup": [ "/include", "/man", "/share/doc", "*.la", "*.a" ], "sources" : [ { "type" : "archive", "url" : "https://github.com/libusb/libusb/releases/download/v1.0.27/libusb-1.0.27.tar.bz2" } ] }
验证修改
修改完manifest后,重新在Gnome Builder中构建应用,meson应该能正常识别libusb-1.0依赖。如果仍有问题,可以手动进入Flatpak环境检查libusb安装状态:
flatpak run --command=bash org.gnome.Sdk//master pkg-config --modversion libusb-1.0
若能输出libusb版本号,说明依赖安装成功。
内容的提问来源于stack exchange,提问作者Reynaldo Rea

