• 8079阅读
  • 3回复

[提问]qt4.7.4使用msvc2010静态编译qoci失败求解 [复制链接]

上一主题 下一主题
离线coolfarseer
 
只看楼主 倒序阅读 楼主  发表于: 2012-03-20
静态编译过程:
运行环境xp sp3从官网下载了qt-everywhere-opensource-src-4.7.4.zip并解压到e:\Qt4.7.4\,根据网上的说明如下设置
修改..\mkspecs\win32-msvc2010\qmake.conf中:
  1. QMAKE_CFLAGS_RELEASE    = -O2 -MT
  2. QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi
  3. QMAKE_CFLAGS_DEBUG      = -Zi -MTd


PATH环境变量中添加:”e:\Qt4.7.4\″
添加新的环境变量,名字为”QMAKESPEC”,值为”win32-msvc2010″
添加新的环境变量,名字为”QTDIRnew”,值为”e:\Qt4.7.4\″(我原来已有4.7.3非静态版本)
然后进入Visual StudioCommand Prompt (2010)
跳转到e:\Qt4.7.4\
设定
  1. set INCLUDE=%INCLUDE%;D:/Work/Oracle_10.2_client/oci/include
  2. set LIB=%LIB%;D:/Work/Oracle_10.2_client/oci/lib


输入
  1. configure –platform win32-msvc2010 -debug-and-release -opensource -static -fast -qt-sql-oci -plugin-sql-oci -qt-sql-odbc -plugin-sql-odbc -qt-sql-sqlite -plugin-sql-sqlite -no-qt3support -qt-zlib -qt-gif -qt-libpng -qt-libmng -qt-libtiff -qt-libjpeg -no-webkit -qt-style-windowsxp -qt-style-windowsvista -nomake examples –nomake docs -nomake demos


提示确定后输入y
Configure成功后nmake,无提示错误完成
然后将e:\Qt4.7.4\\bin\qmake.exe添加到工具\选项\qt4\qt版本



测试过程:
这样设置后我的工程中除去oracle相关部分生成的debug中的exe文件可以在server2003中正常工作,添加了oracle部分后

提示
qoci driver not loaded
采用网上的测试代码
  1. #include <QtCore/QCoreApplication>
  2. #include <QSqlDatabase>
  3. #include <QStringList>
  4. #include <QDebug>
  5. int main(int argc, char *argv[])
  6. {
  7.     QCoreApplication a(argc, argv);
  8.     qDebug() << "Available drivers:";
  9.     QStringList drivers = QSqlDatabase::drivers();
  10.     foreach(QString driver, drivers)
  11.         qDebug() << "\t" << driver;
  12.     QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
  13.     qDebug() << "ODBC driver valid?" << db.isValid();
  14.     QString str=",,,,";
  15.     if(str.indexOf(",,")==0)
  16.         str="-010";
  17.     str.insert(3,".");
  18.     float tempR=str.toFloat();
  19.     qDebug()<<tempR;
  20.     return a.exec();
  21. }



我原来的qt4.7.3未静态编译版本显示
Available drivers:
“qsqlite”
“qoci8”
“qoci”
“qodbc3”
“qodbc”
ODBC driver valid? True
-1


现在的qt4.7.4静态版本显示
Available drivers:
QSqlDatabase: QODBC driver not loaded
QSqlDatabase:available drivers:
ODBC driver valid? False
-1


问题
根据上述测试验证,是指完全没有静态编译成功qsqliteqodbcqoci其中的任何一个?原因是什么呢
后来自己又单独用src\plugin\sqldrivers\oci 里的oci.pro4.7.4静态版本试图生成lib文件,
原来4.7.3中这么做最后提示
qsqloci.exe启动中、无法启动进程,系统找不到制定的文件
但是生成的qsqlocid4.dllqsqlocid4.lib放入sqldriver文件夹后oracle工程可用
现在4.7.4静态版本提示
无法找到执行档,请指定一个
生成了的debug_static中只有obj文件

So苦恼中,如何静态编译qoci或者原有的动态版本附加那些dll可以在无oracle的机器上使用?网上没找到,于是来求诸位大牛援手,多谢!

离线liking123
只看该作者 1楼 发表于: 2012-03-26
编译好了qoci,放入相应的文件夹里(除非你知道了路径),就可以使用了啊?
离线coolfarseer
只看该作者 2楼 发表于: 2012-04-05
引用第1楼liking123于2012-03-26 11:20发表的  :
[表情] 编译好了qoci,放入相应的文件夹里(除非你知道了路径),就可以使用了啊?

出差去了忘了关注


我也估摸着帖子太长得逐个解释


帖子大意与你相关的问题是:动态编译qoci没有问题,静态编译qoci按如上configure参数nmake经过测试是失败的。。。就是问这个问题,当然动态编译的dll和lib就我所见明显是不能扔到静态版本相关路径下直接使用的
离线dearwsjj
只看该作者 3楼 发表于: 2012-12-04
Qt的数据库插件好像是以动态库的形式加载的吧。我之前也尝试静态编译QOCI驱动,编译成功了,但是无法加载,可能是我的操作不对。不过我的理解如下:
1. 如果需要字没与安装ORACLE的库的机子上能运行的话。那么编译的时候你需要有ORACLE库的静态库文件。
2. 你需要对QOCI进行静态编译。那么QOCI在你主程序编译的时候就已经编译好了,静态库是直接编译到主程序里的,应该以后就不会再需要加载库文件了。
3. 需要在你主程序里的.pro文件里指定静态QOCI库文件的路径。
我并没有尝试过,所以不知道是否能成功。但是我觉得,你只要在程序发布的时候包含ORACLE的库一起发布就行了,没有必要将QOCI也编译成静态库。
快速回复
限100 字节
 
上一个 下一个