标题:请教,有人试过编译odbc的静态插件吗?可以静态发布SQL程序吗?
作者:blankc
日期:2011-10-26 12:26
内容:
小弟希望发布一个不带任何库文件的静态编译的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 sqlQTPLUGIN += qsqlodbcLIBS += E:/Qt/4.7.3/plugins/sqldrivers/qsqlodbc.lib main.cpp文件:
#include 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静态 ..
#1 [jorneyr 10-26 13:15]
一点小建议:
数据库要么就用SQLite,MySQL,甚至Oracle等,没必要去麻烦微软,主要是不跨平台。
普通应用,如果不涉及到网络,我个人更喜欢SQLite
#2 [XChinux 10-26 14:13]
编译Qt库的时候不是有configure选硒-qt-sql-odbc、-plugin-sql-odbc选项么?你使用 -qt-sql-odbc选项就行了啊。
#3 [blankc 10-26 15:06]
回二楼:
静态编译的时候,我已经加了-qt-sql-odbc和-plugin-sql-odbc这两个选项了啊
是不是不要加-plugin-sql-odbc这一句,这样它就不会以插件的形式存在啊?