QxOrm编译使用手记

来源:互联网 发布:小米口罩知乎 编辑:程序博客网 时间:2024/06/06 03:32

手上有两个项目,都是用Qt写的,分别用了MS Access和MySql数据库,最近有一个优化数据库操作、提升速度、未来可能迁移到Oracle的需求,就想到引入ORM把较小的MS Access项目改了,如果效果好,再引入到MySql项目然后迁移到Oracle,因此我一开始就抱着很明确的目标:支持Qt或C++,支持Oracle、MySql、ODBC(MS Access)。

在百度上很容易搜到,C++的ORM仅有ODB和QxOrm,先不谈编译ODB的各种失败,主要讲讲QxOrm相关的起起伏伏。

一般来说,使用百度上都能找到这两篇编译QxOrm的相关文章:

http://blog.csdn.net/u014761456/article/details/49824727[QxOrm笔记(一)]

http://www.cnblogs.com/YanLe/p/3251912.html[QxORM在Win7下的测试]

QxOrm依赖于boost库,因此必须首先编译boost,boost下载链接很容易找到,新旧版本下载的都很顺利。我的环境是WIN10(64bit)+Qt5.5.1+mingw4.9,因此一开始我以[QxOrm笔记(一)]为基础,boost下载的版本号是1.55,虽然编译花了近1个小时并且编译过程产生了很多warning,但是编译算是成功了。

接着开始找QxOrm。

嗯?官网上不去?网上不去?上不去?不去?去?

尝试ping了一下qxorm.com,是一个法国的IP。

用了一些不可描述的方法成功打开Google,地址栏输入www.qxorm.com,回车。

嗯?还是上不去?是上不去?上不去?不去?去?

多次试验,表明这个官网不可能打开之后,我就开始在网上找各种能下载QxOrm的资源,终于找到了一个通过美国镜像下载的QxOrm1.4.1(现在最新版是1.4.2),然后按照[QxOrm笔记(一)]的描述,修改pri文件,编译。

失败,因为编译bool_array.cpp文件生成bool_array.o对象时失败。

百度这个错误--没有任何有效回答,stackflow里也没相关问答。

好吧,我打开bool_array.cpp文件,发现其实整个文件因为预定义判断为false的关系,根本没有实现代码,卧槽这样都会生成错误?在逗我吗?

后来我发现的确会的,因为它包含了1个头文件。

我开始尝试各种办法:重新编译QxOrm,重新编译boost库,添加环境变量,修改工程文件,修改部分代码,都没有任何作用,错误依然是编译bool_array.cpp文件生成bool_array.o对象时失败。

后来我决定完全按照[QxOrm笔记(一)]上写的来,使用boost1.56和QxOrm1.3.2,虽然找不到1.3.2,但是在CSDN上找到了1.2.6,抱着勉强一试的态度(因为这时候从开始找ORM已经过去4天了)编译了下,依然是编译bool_array.cpp文件生成bool_array.o对象时失败。

这时候我就知道[QxOrm笔记(一)]这个文章对我的参考价值不大,开始专注于[QxORM在Win7下的测试],按照里面写的步骤,首先,下载了boost1.42,然后使用了编译单独动态库的方法,编译成功,出现的是lib和dll文件。

使用已经装在电脑上的QxOrm1.2.6,开始编译QxOrm,等了一会儿,虽然产生了3000+的warning,但是编译通过!

怀着激动的心情建立[QxORM在Win7下的测试]中的sample,将QxOrm.dll复制到编译目录下,开始编译,出现了不能识别xport-all-symbols的错误,这个错误虽然难找,但是终于在stackflow找到解答,只要自己打开Makefile.Release文件,在-export-all-symbols前加上-Wl,成为-Wl,-export-all-symbols就行,据说这是Qt固有bug,会把-e认为是一个参数,之后的xport-all-symbols因为e被截取就认不出来了。

重新编译后,编译成功,但是程序一运行就崩溃。开启调试器,发现是在前期加载dll时崩溃的,有若干个错误代码,都尝试找过但是没有任何有用信息。 经过不断尝试,我想到一个办法,开始逐步注释sample中的代码,终于确定在引入QxOrm头文件后会让程序崩溃,这说明我用的1.2.6有问题。

迅速换上1.4.1,在QxSimpleCrypt.cpp文件加上头文件:

#include <QDataStream>

编译一次通过,sample也终于运行成功!但是程序报告没有sqlite驱动。 我的确没装sqlite,所以我修改了例子代码,尝试连接mysql:

qx::QxSqlDatabase::getSingleton()->setDriverName("QMYSQL");
出现了提示:

[QxOrm] qx::QxSqlDatabase : create new database connection in thread '0x59f4' with key '{722360e2-d047-44dd-9ce4-7bfe2124e621}'
[QxOrm] -- WARNING -- the function qx::dao::create_table<T>() can be used only with a SQLite database to create examples or prototypes, for other databases, it is recommended :
- to use QxEntityEditor application and its DDL SQL database schema export plugin ;
- or to manage the database schema with an external tool provided by the SGBD (SQLite Manager for SQLite, pgAdmin for PostgreSQL, MySQL Workbench for MySQL, etc...) ;
- or to generate database schema using the introspection engine of QxOrm library : go to 'http://www.qxorm.com/qxorm_en/faq.html#faq_230' web page for more details.

Excese me?用其他数据库还要再装一个插件或者自己写逻辑?干嘛不同时把插件给我装好?

好吧,那就下载一个叫QxEntityEditor的插件,但是找了一圈貌似只有qxorm官网才有下载……

Excese me?官网用不可描述的方法都不能访问,让我怎么弄?

好吧,我想到了一个办法,用google快照,终于看到了下载QxEntityEditor的链接,但是一起出现的还有这个:

Note : by default, QxEntityEditor application is limited to 5 entities per project. To get a license key and create unlimited entities per project, please contact us using this e-mail : contact@qxorm.com.

A presentation video of QxEntityEditor application is available.
Price of a QxEntityEditor license key : 300€ (per developer, 12 months of free updates).

Excese me?有5个实例就要收费?许可证还要300欧一个?

果然知识就是金钱啊……正在尝试自己写生成逻辑……

资源(QxOrm1.4.1+boost1.42下载):链接:http://pan.baidu.com/s/1slIfT73 密码:07pa

0 0
原创粉丝点击