• 6924阅读
  • 3回复

[提问]请教,有人试过编译odbc的静态插件吗?可以静态发布SQL程序吗? [复制链接]

上一主题 下一主题
离线blankc
 

只看楼主 倒序阅读 楼主  发表于: 2011-10-26
— 本帖被 XChinux 从 Qt基础编程 移动到本区(2011-10-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文件里找到这样一行代码:
  1. CONFIG += qt plugin
    添加static属性:
  1. CONFIG += qt plugin static
    编译后得到静态插件qsqlodbc.lib,放入E:\QT\4.7.3\plugins\sqldrivers目录里面。    可是在引用该静态插件时,却连续报了29个LNK2019错误。我完全是按照How to Create Qt Plugins文档里的方法引用qsqlodbc.lib静态插件的:    .pro文件:
  1. QT       += core gui sql
  2. QTPLUGIN += qsqlodbc
  3. LIBS += E:/Qt/4.7.3/plugins/sqldrivers/qsqlodbc.lib
     main.cpp文件:
  1. #include <QtPlugin>
  2. Q_IMPORT_PLUGIN(qsqlodbc)
    错误信息:
  1. qsqlodbc.lib(qsql_odbc.obj) : error LNK2019: 无法解析的外部符号 _SQLGetData@24,该符号在函数 "class QVariant __cdecl qGetIntData(void *,int,bool)" (?qGetIntData@@YA?AVQVariant@@PAXH_N@Z) 中被引用
  2. qsqlodbc.lib(qsql_odbc.obj) : error LNK2019: 无法解析的外部符号 _SQLGetInfoW@20,该符号在函数 "public: class QChar __thiscall QODBCDriverPrivate::quoteChar(void)" (?quoteChar@QODBCDriverPrivate@@QAE?AVQChar@@XZ) 中被引用
  3. qsqlodbc.lib(qsql_odbc.obj) : error LNK2019: 无法解析的外部符号 _SQLDescribeColW@36,该符号在函数 "class QVariant __cdecl qGetBinaryData(void *,int)" (?qGetBinaryData@@YA?AVQVariant@@PAXH@Z) 中被引用
  4. …………(29个同样类型的错误
    这个问题我百思不得其解,因为使用同样的方法引用How to Create Qt Plugins文档里提到的qsqlite.lib和qgif.lib静态插件,是可以编译通过的,而且调用QPluginLoader::staticInstances()方法也能够看到确实成功引用了该静态插件。     另外,我又换了个MySql数据库,重新编译了qsqlmysql.lib静态插件,结果引用的时候和ODBC一样也报了50个LNK2019错误。    因此我怀疑是不是我编译的静态插件qsqlodbc.lib不对。可是同样的方法编译出来的qsqlite.lib却可以用。不知道是为什么?    有没有人成功编译过QT数据库静态插件并且能够成功引用的,麻烦告诉我具体的步骤是什么,万分感谢!!
离线jorneyr

只看该作者 1楼 发表于: 2011-10-26
一点小建议:
数据库要么就用SQLite,MySQL,甚至Oracle等,没必要去麻烦微软,主要是不跨平台。
普通应用,如果不涉及到网络,我个人更喜欢SQLite
离线XChinux

只看该作者 2楼 发表于: 2011-10-26
编译Qt库的时候不是有configure选硒-qt-sql-odbc、-plugin-sql-odbc选项么?你使用 -qt-sql-odbc选项就行了啊。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线blankc

只看该作者 3楼 发表于: 2011-10-26
回二楼:
    静态编译的时候,我已经加了-qt-sql-odbc和-plugin-sql-odbc这两个选项了啊
    是不是不要加-plugin-sql-odbc这一句,这样它就不会以插件的形式存在啊?
快速回复
限100 字节
 
上一个 下一个