【问题标题】:Qt 4.8: loading SQL drivers from shared library/DLLQt 4.8:从共享库/DLL 加载 SQL 驱动程序
【发布时间】:2014-06-11 16:25:35
【问题描述】:

我正在使用 Qt 4.8.4 在 Mac OS 和 Windows 上编写应用程序。该程序由可执行文件和共享库/dll 组成,并使用 SQLite 驱动程序。

开发主要在 Mac OS 上完成,这是我今天主要关心的问题。

在开发/调试模式下一切正常时,Qt 从框架中的硬编码路径加载其库。

部署应用程序时,它无法从我的共享库中加载 libqsqlite.dylib 插件。应用程序和库都通过 QSqlDatabase 接口使用 SQLite。该应用程序似乎可以正常加载驱动程序,因为它读取了 qt.conf。

在部署应用程序时,其他应用程序可以使用的共享库在启动时无法加载 libqsqlite.dylib 驱动程序。

据我了解,Qt 使用 QCoreApplication 加载驱动程序,但库不使用此类。我不知道如何指示 Qt 从库中加载驱动程序,指向包中驱动程序的副本。驱动程序位于 /Contents/PlugIns/sqldrivers 中。

我尝试使用 QPluginLoader 类在库的入口点手动加载驱动程序并且加载正常,但 Qt 没有检测到内存中的驱动程序,因此它尝试再次加载它,但它照常失败。

一些细节:

  • Mac OS 10.9
  • 用XCode编译的Qt 4.8.4,使用两年没有问题
  • 使用 macdeployqt 部署应用程序

任何建议将不胜感激。

【问题讨论】:

    标签: c++ macos qt sqlite


    【解决方案1】:

    您应该将 libqsqlite.dylib 放在应用程序可执行二进制文件旁边的名为 sqldrivers 的文件夹中。还要确保将 libQtSql.dylib 放在应用程序二进制文件旁边。

    【讨论】:

    • 已经完成了,还是不行。程序看到它,但库没有。我查看了 Qt 代码,它需要一个 QCoreApplication 对象来加载 SQL 插件。共享库/DLL 没有 QCoreApplication,因此必须有替代方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-17
    • 2020-08-02
    • 1970-01-01
    • 2019-08-23
    • 1970-01-01
    • 2016-04-09
    • 1970-01-01
    相关资源
    最近更新 更多