小弟希望发布一个不带任何库文件的静态
编译的QT程序,由于涉及到
数据库的操作,因此需要编译数据库的
静态插件。 帮助文档How to Create Qt Plugins里动态插件Extra Filters和静态插件Basic Tools的区别是.pro文件的CONFIG属性是否添加static。 我打开E:\QT\4.7.3\src\plugins\sqldrivers\odbc里的odbc.pro项目,在子项目的qpluginbase.pro文件里找到这样一行代码:
- CONFIG += qt plugin
添加static属性:
- CONFIG += qt plugin static
编译后得到静态插件qsqlodbc.lib,放入E:\QT\4.7.3\plugins\sqldrivers目录里面。 可是在引用该静态插件时,却连续报了29个LNK2019错误。我完全是按照How to Create Qt Plugins文档里的方法引用qsqlodbc.lib静态插件的: .pro文件:
- QT += core gui sql
- QTPLUGIN += qsqlodbc
- LIBS += E:/Qt/4.7.3/plugins/sqldrivers/qsqlodbc.lib
main.cpp文件:
- #include <QtPlugin>
- Q_IMPORT_PLUGIN(qsqlodbc)
错误信息:
- qsqlodbc.lib(qsql_odbc.obj) : error LNK2019: 无法解析的外部符号 _SQLGetData@24,该符号在函数 "class QVariant __cdecl qGetIntData(void *,int,bool)" (?qGetIntData@@YA?AVQVariant@@PAXH_N@Z) 中被引用
- qsqlodbc.lib(qsql_odbc.obj) : error LNK2019: 无法解析的外部符号 _SQLGetInfoW@20,该符号在函数 "public: class QChar __thiscall QODBCDriverPrivate::quoteChar(void)" (?quoteChar@QODBCDriverPrivate@@QAE?AVQChar@@XZ) 中被引用
- qsqlodbc.lib(qsql_odbc.obj) : error LNK2019: 无法解析的外部符号 _SQLDescribeColW@36,该符号在函数 "class QVariant __cdecl qGetBinaryData(void *,int)" (?qGetBinaryData@@YA?AVQVariant@@PAXH@Z) 中被引用
- …………(29个同样类型的错误)
这个
问题我百思不得其解,因为使用同样的方法引用How to Create Qt Plugins文档里提到的qsqlite.lib和qgif.lib静态插件,是可以编译通过的,而且调用
QPluginLoader::staticInstances
()方法也能够看到确实成功引用了该静态插件。 另外,我又换了个MySql数据库,重新编译了qsqlmysql.lib静态插件,结果引用的时候和ODBC一样也报了50个LNK2019错误。 因此我怀疑是不是我编译的静态插件qsqlodbc.lib不对。可是同样的方法编译出来的qsqlite.lib却可以用。不知道是为什么? 有
没有人成功编译过QT数据库静态插件并且能够成功引用的,麻烦告诉我具体的步骤是什么,万分感谢!!