在linux系統(tǒng)中使用QxOrm框架1:運行QxOrm框架中的例子

最近用QT開發(fā),要用到數(shù)據(jù)庫快耿,翻開以前的代碼囊陡,雖然自己寫了個框架,但那時年少掀亥,現(xiàn)在重新用以前的套路感覺好費勁撞反。
由于最近搞過springboot、安卓等java應(yīng)用搪花,感覺使用orm框架真的很提高效率遏片。因此想QT應(yīng)該也有orm框架嘹害,經(jīng)過百度對比,使用較多就是QxOrm啦吮便。


本文僅針對linux系統(tǒng)中的使用笔呀,其他系統(tǒng)請參照官方文檔。
如果有其他更簡便的方法线衫,請告知凿可,感謝!
關(guān)于boost的交叉編譯授账,可參照這里
如在自己的項目中使用QxOrm枯跑,可參照這里


  • 開發(fā)環(huán)境
    ubuntu10,QtCreator2.4.1(基于Qt4.7.2 32bit)
  • 本文目標(biāo)
    運行QxOrm中的例子
  • 本文目錄
    一白热、文件下載
    二敛助、安裝boost
    三、編譯QxOrm項目
    四屋确、 運行例子
    五纳击、補(bǔ)充:使用系統(tǒng)環(huán)境變量編譯QxOrm

一、文件下載

由于 QxOrm官網(wǎng)鏈接 需要翻墻攻臀,因此提供百度下載焕数,版本為1.4.5
鏈接:https://pan.baidu.com/s/1g9h_3pmwFR5IacQmIQwaAA
提取碼:21j9
下載的鏈接中有3個文件,說明如下:

  • QxOrm_1.4.5.zip:該框架源碼刨啸,包括文檔堡赔、示例代碼等
  • boost_1_57-精簡.zip:QxOrm官網(wǎng)提供的下載包。如果不需要使用 boost serialization 功能设联,也可以不用下載該文件善已,但例子中用到了,所以要進(jìn)行處理离例。經(jīng)驗證换团,該包沒法在linux下使用。
  • boost_1_57_0-完整.zip:完整的boost包宫蛆。由于QxOrm官網(wǎng)使用1.57的版本艘包,因此本人也使用同樣版本,后續(xù)的安裝也使用該文件耀盗。

二辑甜、安裝boost

  1. 命令行進(jìn)入boost_1_57_0-完整.zip 的解壓目錄,執(zhí)行以下命令

./bootstrap.sh --prefix=/home/jishufeng/boost_1_57_0

--prefix是要安裝的目錄袍冷。

  1. 操作結(jié)束后,執(zhí)行如下命令猫牡,進(jìn)入漫長的安裝..

./b2 install

  1. 編譯結(jié)束胡诗,找到我們需要的文件。
    路徑:/home/jishufeng/boost_1_57_0/lib
    文件名:libboost_serialization.so.1.57.0煌恢,但我們一會用boost_serialization
    image.png

三骇陈、編譯QxOrm項目

  1. QtCreate打開QxOrm.pro,加載整個項目
    image.png
  2. 右鍵該項目埠胖,清理項目執(zhí)行qmake刀脏,運行項目時尤仍,出現(xiàn)如下錯誤

/usr/include/c++/4.4/c++0x_warning.h:31: error: #error This file requires compiler and library support for the upcoming ISO C++ standard, C++0x. This support is currently experimental, and must be enabled with the -std=c++0x or -std=gnu++0x compiler options.

在工程文件(pro)中加入下面這段話就OK了,下面例子同樣需要添加這句話婿崭。

QMAKE_CXXFLAGS += -std=c++0x

  1. 修改QxOrm.pri文件

a. 由于該例子要用到 boost serialization,因此我們需要取消QxOrm.pri中如下兩個位置的注釋

DEFINES += _QX_ENABLE_BOOST
DEFINES += _QX_ENABLE_BOOST_SERIALIZATION

b. 修改依賴路徑
將如下

contains(DEFINES, _QX_ENABLE_BOOST) {
isEmpty(QX_BOOST_INCLUDE_PATH) { QX_BOOST_INCLUDE_PATH = $$quote($$(BOOST_INCLUDE)) }
contains(DEFINES, _QX_ENABLE_BOOST_SERIALIZATION) {

isEmpty(QX_BOOST_LIB_PATH) { QX_BOOST_LIB_PATH = $$quote($$(BOOST_LIB)) }
isEmpty(QX_BOOST_LIB_SERIALIZATION_DEBUG) { QX_BOOST_LIB_SERIALIZATION_DEBUG = "$$(BOOST_LIB_SERIALIZATION_DEBUG)" }
isEmpty(QX_BOOST_LIB_SERIALIZATION_RELEASE) { QX_BOOST_LIB_SERIALIZATION_RELEASE = "$$(BOOST_LIB_SERIALIZATION_RELEASE)" }
# isEmpty(QX_BOOST_LIB_WIDE_SERIALIZATION_DEBUG) { QX_BOOST_LIB_WIDE_SERIALIZATION_DEBUG = "$$(BOOST_LIB_WIDE_SERIALIZATION_DEBUG)" }
# isEmpty(QX_BOOST_LIB_WIDE_SERIALIZATION_RELEASE) { QX_BOOST_LIB_WIDE_SERIALIZATION_RELEASE = "$$(BOOST_LIB_WIDE_SERIALIZATION_RELEASE)" }

} # contains(DEFINES, _QX_ENABLE_BOOST_SERIALIZATION)
} # contains(DEFINES, _QX_ENABLE_BOOST)

修改為

contains(DEFINES, _QX_ENABLE_BOOST) {
# 修改為boost的源碼根目錄
isEmpty(QX_BOOST_INCLUDE_PATH) { QX_BOOST_INCLUDE_PATH = $$quote(/mnt/hgfs/vm_share/source/boost_1_57_0) }
contains(DEFINES, _QX_ENABLE_BOOST_SERIALIZATION) {

# 修改為boost安裝目錄下的lib文件夾
isEmpty(QX_BOOST_LIB_PATH) { QX_BOOST_LIB_PATH = $$quote(/home/jishufeng/boost_1_57_0/lib) }
# 以下兩個修改為 boost 安裝后生成的 boost_serialization 庫的名稱
isEmpty(QX_BOOST_LIB_SERIALIZATION_DEBUG) { QX_BOOST_LIB_SERIALIZATION_DEBUG = "boost_serialization" }
isEmpty(QX_BOOST_LIB_SERIALIZATION_RELEASE) { QX_BOOST_LIB_SERIALIZATION_RELEASE = "boost_serialization" }
# isEmpty(QX_BOOST_LIB_WIDE_SERIALIZATION_DEBUG) { QX_BOOST_LIB_WIDE_SERIALIZATION_DEBUG = "$$(BOOST_LIB_WIDE_SERIALIZATION_DEBUG)" }
# isEmpty(QX_BOOST_LIB_WIDE_SERIALIZATION_RELEASE) { QX_BOOST_LIB_WIDE_SERIALIZATION_RELEASE = "$$(BOOST_LIB_WIDE_SERIALIZATION_RELEASE)" }

} # contains(DEFINES, _QX_ENABLE_BOOST_SERIALIZATION)
} # contains(DEFINES, _QX_ENABLE_BOOST)

請注意修改后添加的注釋位置肴颊,修改為自己的路徑

  1. 重新清理氓栈、qmake、運行后婿着,可在QxOrm的lib目錄下看到剛生成的文件libQxOrm.so.1.4.5
    image.png

    將生成的文件復(fù)制并重命名為libQxOrm.so.1libQxOrm.so
    image.png

    如果不進(jìn)行以上操作授瘦,在運行例子時會報如下錯誤

error: cannot find -lQxOrm

image.png

關(guān)于so文件的一些知識,可參考
Linux動態(tài)鏈接庫.so文件的創(chuàng)建與使用

四. 運行例子

  1. QtCreator加載項目qxBlog.pro
    image.png
  2. 在工程文件(pro)中加入下面這段話

QMAKE_CXXFLAGS += -std=c++0x

  1. 運行
    可看到控制臺一堆輸出
    image.png

    也可在./test/_bin目錄下看到生成的數(shù)據(jù)庫文件
    image.png

    通過Navicat Premium可查看到數(shù)據(jù)庫文件中的內(nèi)容如下
    image.png

以上我們已完成目標(biāo)竟宋,以下僅作使用補(bǔ)充提完。


五、補(bǔ)充:使用系統(tǒng)環(huán)境變量編譯QxOrm

在上面丘侠,我們編譯QxOrm項目是修改pri文件中的變量徒欣,我們也可以

  1. 同樣取消以下2個注釋
DEFINES += _QX_ENABLE_BOOST
DEFINES += _QX_ENABLE_BOOST_SERIALIZATION
  1. 保持pri文件如下位置不變
contains(DEFINES, _QX_ENABLE_BOOST) {
isEmpty(QX_BOOST_INCLUDE_PATH) { QX_BOOST_INCLUDE_PATH = $$quote($$(BOOST_INCLUDE)) }
contains(DEFINES, _QX_ENABLE_BOOST_SERIALIZATION) {

isEmpty(QX_BOOST_LIB_PATH) { QX_BOOST_LIB_PATH = $$quote($$(BOOST_LIB)) }
isEmpty(QX_BOOST_LIB_SERIALIZATION_DEBUG) { QX_BOOST_LIB_SERIALIZATION_DEBUG = "$$(BOOST_LIB_SERIALIZATION_DEBUG)" }
isEmpty(QX_BOOST_LIB_SERIALIZATION_RELEASE) { QX_BOOST_LIB_SERIALIZATION_RELEASE = "$$(BOOST_LIB_SERIALIZATION_RELEASE)" }
# isEmpty(QX_BOOST_LIB_WIDE_SERIALIZATION_DEBUG) { QX_BOOST_LIB_WIDE_SERIALIZATION_DEBUG = "$$(BOOST_LIB_WIDE_SERIALIZATION_DEBUG)" }
# isEmpty(QX_BOOST_LIB_WIDE_SERIALIZATION_RELEASE) { QX_BOOST_LIB_WIDE_SERIALIZATION_RELEASE = "$$(BOOST_LIB_WIDE_SERIALIZATION_RELEASE)" }

} # contains(DEFINES, _QX_ENABLE_BOOST_SERIALIZATION)
} # contains(DEFINES, _QX_ENABLE_BOOST)
  1. /etc/profile添加如下系統(tǒng)環(huán)境變量
export BOOST_INCLUDE=/mnt/hgfs/vm_share/source/boost_1_57_0
export BOOST_LIB=/home/jishufeng/boost_1_57_0/lib
export BOOST_LIB_SERIALIZATION_DEBUG=boost_serialization
export BOOST_LIB_SERIALIZATION_RELEASE=boost_serialization

添加后執(zhí)行source /etc/profile使環(huán)境變量生效,但在QtCreator似乎沒有生效婉陷,因此重啟虛擬機(jī)帚称、清理項目、執(zhí)行qmake秽澳,再運行闯睹,重新生成libQxOrm.so文件


END

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市担神,隨后出現(xiàn)的幾起案子楼吃,更是在濱河造成了極大的恐慌,老刑警劉巖妄讯,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件孩锡,死亡現(xiàn)場離奇詭異,居然都是意外死亡亥贸,警方通過查閱死者的電腦和手機(jī)躬窜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來炕置,“玉大人荣挨,你說我怎么就攤上這事男韧。” “怎么了默垄?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵此虑,是天一觀的道長。 經(jīng)常有香客問我口锭,道長朦前,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任鹃操,我火速辦了婚禮韭寸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘组民。我一直安慰自己棒仍,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布臭胜。 她就那樣靜靜地躺著莫其,像睡著了一般。 火紅的嫁衣襯著肌膚如雪耸三。 梳的紋絲不亂的頭發(fā)上乱陡,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天,我揣著相機(jī)與錄音仪壮,去河邊找鬼憨颠。 笑死,一個胖子當(dāng)著我的面吹牛积锅,可吹牛的內(nèi)容都是我干的爽彤。 我是一名探鬼主播,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼缚陷,長吁一口氣:“原來是場噩夢啊……” “哼适篙!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起箫爷,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤嚷节,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后虎锚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體硫痰,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年窜护,在試婚紗的時候發(fā)現(xiàn)自己被綠了效斑。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡柱徙,死狀恐怖鳍悠,靈堂內(nèi)的尸體忽然破棺而出税娜,到底是詐尸還是另有隱情,我是刑警寧澤藏研,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站概行,受9級特大地震影響蠢挡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜凳忙,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一业踏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧涧卵,春花似錦勤家、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至乐设,卻和暖如春讼庇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背近尚。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工蠕啄, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人戈锻。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓歼跟,卻偏偏與公主長得像,于是被迫代替她去往敵國和親格遭。 傳聞我的和親對象是個殘疾皇子哈街,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,509評論 2 348

推薦閱讀更多精彩內(nèi)容