Qt 4.8:从共享库/ DLL加载SQL驱动程序

时间:2014-04-25 19:56:06

标签: c++ macos qt sqlite

我正在使用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
  • Qt 4.8.4使用XCode编译,使用两年没有问题
  • 使用macdeployqt部署应用程序

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:0)

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