回帖:fsu0413:
动态的插件肯定不能和静态Qt一起用。。。。
我之前做静态的mysql插件的时候碰到的问题是 静态mysql插件在链接时直接依赖构建时使用的mysql库。当时官方发布的库就是动态库。
而且因为Qt是静态的,导致所有使用Qt Sql库并且使用我之前制作的静态Qt版本都要去我当时构建的路径找mysql库。
可以在打包的时候把 libmysql.dll 复制到 Qt 库的bin目录下,把 libmysql.lib 复制到Qt库的lib目录下,然后修改 plugins/sqldrivers/qsqlmysql.prl,把 mysql 库相关的部分改成 $$/libmysql.lib,这样 qmake 就会从 Qt 库的lib目录下找 libmysql.lib,而不是从构建时 libmysql.lib 所在目录下找。
以Qt 5.15.4 vs2019 x86 静态编译为例,修改后的 qsqlmysql.prl 文件如下(省略未修改的行):
QMAKE_PRL_LIBS = $$/Qt5Sql.lib $$/Qt5Core.lib mpr.lib userenv.lib version.lib $$/qtpcre2.lib netapi32.lib ws2_32.lib advapi32.lib kernel32.lib ole32.lib shell32.lib uuid.lib user32.lib winmm.lib $$/libmysql.lib
QMAKE_PRL_LIBS_FOR_CMAKE = $$/Qt5Sql.lib;$$/Qt5Core.lib;mpr.lib;userenv.lib;version.lib;$$/qtpcre2.lib;netapi32.lib;ws2_32.lib;advapi32.lib;kernel32.lib;ole32.lib;shell32.lib;uuid.lib;user32.lib;winmm.lib;$$/libmysql.lib;;;
理论上静态Qt链接的其他第三方库也可以用这种方法来处理,但这些第三方库要修改的文件更多,如openssl需要修改mkspecs/modules/qt_lib_network_private.pri lib/Qt5Network.prl plugins/bearer/qgenericbearer.prl 和 plugins/generic/qtuiotouchplugin.prl