请教几个 qt6, macos 打包遇到依赖问题。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tiandishi
V2EX    Qt

请教几个 qt6, macos 打包遇到依赖问题。

  •  
  •   tiandishi 240 天前 1402 次点击
    这是一个创建于 240 天前的主题,其中的信息可能已经有所发展或是发生改变。
    div class="markdown_body">

    请教几个 qt6 ,macos 打包遇到依赖问题。

    我做了个音乐播放器,引用的外部库只有 libmpv ,还引用了 qt 的 sql ,用于处理 sqlite 数据库。问题可能主要出现在这两个。 编译调试运行都没啥问题,开发完成想要打包发布,macdeployqt6 打包出来的却无法运行。 仔细分析认为有些依赖有问题,比如编译的时候 ok ,理论上所有依赖在本机都已经齐全,macdeployqt6 打包却告知会引用 Postgres.app 下面的一个库,而这个 app 我之前根本没有安装。类似的还有 libjxl_cms.0.11.dylib libjxl.0.11.dylib 等图片相关的库,需要额外下载才能打包,编译运行却不需要。

    换思路采用 xcode 来打包,先 qmake make 生成 xcode 项目,导入后可以编译运行,archive 打包逐个测试依赖的库,发现不集成部分依赖的 Framework 可运行,全部集成却不行。

    第二个问题是,解决完上述依赖文件后,打包的程序.app 还是无法直接双击打开,看汇报日志出现 signed 、ns 等模糊问题。更奇葩的是,有时候采用 lldb 对打包的程序进行调试可以运行,直接打开 app 却打不开。 Termination Reason: Namespace SIGNAL lldb 报错 :qianqianplayer[73941:807292] This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem

    求有经验的人指点迷津,如果您不知道我在说啥,可能您难以解决我的问题,就随便看看。

    如有任何思路,不胜感激,困扰好几天了。

    5 条回复    2025-04-21 10:40:06 +08:00
    icedx
        1
    icedx  
       240 天前
    大概率是 libqcocoa.dylib 没有在 find path
    tiandishi
        2
    tiandishi  
    OP
       240 天前
    @icedx 看了下并没有依赖这个 lib,加入了之后也没什么进展。
    有个问题请教下,不清楚为啥编译运行 ok ,打包却依赖需要下载的新 lib ,理论上编译能运行的话本地不就应该就包含了所有依赖吗,只要解决依赖问题就应该 ok 了啊?
    sillydaddy
        3
    sillydaddy  
       239 天前
    “ This application failed to start because no Qt platform plugin could be initialized”,这个错误发布 Qt 的会经常遇到,我就在 Windows 系统和 Linux 系统上遇到过,macOS 应该也类似。

    如果你找到 Qt 的库目录(安装目录),那么,除了常见的 Qt5Core.lib ,Qt5Gui.lib 等库文件外,还会发现有一个 plugins/platform 文件夹,里面的就是 Qt 运行依赖的插件库,把这些插件也一同打包(也打包到相对目录 plugins/platform )。

    具体路径我问了下 AI:
    ```
    查找 Qt 安装目录下的 plugins/platforms 文件夹。通常,它位于类似如下路径:
    Windows:Qt/5.x.x/msvc2019_64/plugins/platforms/
    Linux:Qt/5.x.x/gcc_64/plugins/platforms/
    macOS:Qt/5.x.x/clang_64/plugins/platforms/
    ```
    icedx
        4
    icedx  
       239 天前
    @tiandishi
    qcocoa 是 Qt 与系统沟通的桥梁
    就是报错说的 platform plugin

    构建运行的时候, 调试器会设定一系列环境变量指引程序寻找要用到的库
    而直接运行的情况下没有调试器设定环境变量了
    这个时候需要要用到的动态库在 find path 下










    但话又说回来了, 为啥不搞静态构建
    lixile
        5
    lixile  
       239 天前
    虽然没怎么看懂 但是按经验是 plugin load 失败
    系统的环境变量中设置 QT_DEBUG_PLUGINS = 1 看看详细的 plugins 打印日志?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     918 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 22:19 PVG 06:19 LAX 14:19 JFK 17:19
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86