V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tiandishi
V2EX  ›  Qt

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

  •  
  •   tiandishi · 16 天前 · 629 次点击

    请教几个 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  
       16 天前
    大概率是 libqcocoa.dylib 没有在 find path
    tiandishi
        2
    tiandishi  
    OP
       16 天前
    @icedx 看了下并没有依赖这个 lib,加入了之后也没什么进展。
    有个问题请教下,不清楚为啥编译运行 ok ,打包却依赖需要下载的新 lib ,理论上编译能运行的话本地不就应该就包含了所有依赖吗,只要解决依赖问题就应该 ok 了啊?
    sillydaddy
        3
    sillydaddy  
       16 天前
    “ 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  
       16 天前
    @tiandishi
    qcocoa 是 Qt 与系统沟通的桥梁
    就是报错说的 platform plugin

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










    但话又说回来了, 为啥不搞静态构建
    lixile
        5
    lixile  
       16 天前
    虽然没怎么看懂 但是按经验是 plugin load 失败
    系统的环境变量中设置 QT_DEBUG_PLUGINS = 1 看看详细的 plugins 打印日志?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2807 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 14:54 · PVG 22:54 · LAX 07:54 · JFK 10:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.