VS2019 編譯 odb-mysql2.4詳細過程

本文以MySQL數據庫爲例,其他數據庫類似,只需要下載對應的數據庫的包即可。

第一步,準備資源包
本文中下載的代碼可以在odb官網下載,地址爲:https://www.codesynthesis.com/products/odb/download.xhtml
官網下載時,是沒有mysql數據庫的頭文件和鏈接庫的,需要自行另外下載。
需要下載的資源如下圖所示:
在這裏插入圖片描述
也可以在CSDN上下載我已經打包好的資源文件,這個文件包中包含了mysql頭文件和庫文件,有32位和64位,地址爲:
https://download.csdn.net/download/youyicc/12399765
資源文件目錄如下:
在這裏插入圖片描述

第二步,編譯libodb2.4
解壓libodb-2.4.0.zip,解壓後,裏面自帶了VS很多版本的.sln文件,最高的支持到VS2013,不過可以直接用高版本的VS打開。資源目錄如下所示:
在這裏插入圖片描述
用VS2019直接打開,升級到最新的SDK,直接右鍵編譯,這個項目編譯不依賴其他庫,所以直接編譯即可,有一些警告信息,可以不用管它,輸出結果如下:
在這裏插入圖片描述
生成的庫文件如下所示:
在這裏插入圖片描述
在這裏插入圖片描述
這裏是生成的32位的debug版本的,release版本和64位版本直接生成即可。

第三步,編譯libodb-mysql-2.4
直接解壓libodb-mysql-2.4.0.zip文件夾,解壓後資源目錄如下所示:
在這裏插入圖片描述
用VS2019打開libodb-mysql-vc12.sln,升級到最新SDK,此時,如果直接編譯,會提示很多錯誤,如下圖所示:
在這裏插入圖片描述
這裏其實是因爲odb的頭文件沒有找到,所以需要將上一個解壓的文件夾中的odb的頭文件和鏈接庫複製過來,如下圖所示,複製libodb-2.4.0文件夾中的lib文件夾和odb文件夾:
在這裏插入圖片描述
直接替換libodb-mysql-2.4.0文件夾中的lib文件夾和odb文件夾,如下所示:
在這裏插入圖片描述
再次編譯,發現還是提示無法打開“odb/pre.hxx”等錯誤,如下所示:
在這裏插入圖片描述
右鍵項目,點擊屬性,在“VC++ 目錄”中,選擇包含庫目錄,根據需要輸入odb文件夾的相對路徑,例如:
在這裏插入圖片描述
再次編譯,發現odb頭文件找不到的問題,已經不存在了,現在提示mysql的頭文件找不到,如下圖所示:
在這裏插入圖片描述
此時,解壓mysql.zip,目錄結構如下所示:
在這裏插入圖片描述
將include文件夾複製到libodb-mysql-2.4.0文件夾中,如下所示:
在這裏插入圖片描述
再次打開項目屬性,在“C++ 目錄”中添加mysql的路徑,配置如下所示:
在這裏插入圖片描述
最後再編譯,最後發現提示“無法打開odb-d.lib”。
因爲先前已經將上一步生成的lib文件夾複製了過來,這邊只是沒有找到庫的路徑,所以在項目屬性中,打開“C++ 目錄”中添加“庫目錄”,如下所示:
在這裏插入圖片描述
再次編譯,提示“無法打開文件libmysql.lib”文件,這個文件就是mysql的鏈接庫。在mysql文件夾中,將lib32文件夾中的“libmysql.lib”複製到“libodb-mysql-2.4.0/lib”中, 如下所示:
在這裏插入圖片描述
最後編譯完成,如下所示:
在這裏插入圖片描述
生成的庫目錄如下所示:
在這裏插入圖片描述
在這裏插入圖片描述
注:releae的編譯方法類似,64位編譯時複製對應的lib64文件夾到lib64文件夾即可。

第三步,編譯odb-examples-2.4
解壓odb-examples-2.4.0.zip文件,目錄如下所示:
在這裏插入圖片描述
用VS2019打開examples-mysql-vc12.sln文件,升級到最新的SDK庫,默認“c++11-mysql-vc12”是啓動項,這裏不用修改,如果用VS2008之類的不支持C++11的編譯器打開,則編譯“hello-mysql-vc12”,項目配置過程都是相同的。
這裏編譯的時候,會提示一個錯誤,如下所示:
在這裏插入圖片描述
這個問題糾結了很久,最後才知道,是編譯器在編譯之前,會自動將employee.hxx文件通過odb.exe編譯成sql文件和對應的C++類。要編譯employee.hxx,需要先將odb-2.4.0-i686-windows.zip解壓出來,目錄如下所示:
在這裏插入圖片描述
在bin文件夾中,就有odb.exe文件。 這裏有兩種方法可以處理這個問題。
第一種,將employee.hxx複製到odb.exe同級目錄中, 如下所示:
在這裏插入圖片描述
打開cmd窗口,跳轉到odb.exe所在的目錄,執行下面命令:

odb -d <database> --std c++11 --generate-schema --generate-query employee.hxx

這裏database換成mysql即可,這裏會生成幾個文件,如下所示:
在這裏插入圖片描述
將生成的文件複製到odb-examples-2.4.0\c++11目錄下即可,不推薦這種方式,因爲每次重新編譯都需要這樣編譯,挺麻煩的。
第二種,將odb.exe配置到環境變量中。首先將odb-2.4.0-i686-windows複製到系統資源盤(看
各人需要,我是放在D盤的),目錄如下所示:
在這裏插入圖片描述
打開系統環境變量,在系統環境變量的Path中,增加odb.exe的完整目錄,如下所示:
在這裏插入圖片描述
打開cmd窗口,輸入odb --version回車,出現下面的界面表示配置成功,否則重啓電腦試試:
在這裏插入圖片描述
配置好之後,在VS中編譯時,會自動調用odb編譯employee.hxx文件。

這裏直接編譯,也會提示錯誤:無法打開 源 文件“odb/database.hxx”,如下所示:
在這裏插入圖片描述
這裏將上一步libodb-mysql-2.4.0文件夾中的“odb”文件夾和“lib”文件文件夾複製到“odb-examples-2.4.0\c++11”中, 如下所示:
在這裏插入圖片描述
右鍵“c++11-mysql-vc12”,打開屬性對話框,在“VC++ 目錄”中,添加odb和lib,如下所示:
在這裏插入圖片描述
編譯的時候,會提示mysql相關的頭文件不能打開,如下所示:
在這裏插入圖片描述
同樣將mysql文件夾中的include文件夾複製到“odb-examples-2.4.0\c++11”中, 如下所示:
在這裏插入圖片描述
右鍵“c++11-mysql-vc12”,打開屬性對話框,在“VC++ 目錄”中,添加mysql的路徑,如下所示:
在這裏插入圖片描述
再次編譯,提示“無法打開文件 odb-mysql-d.lib”,此時將上一步libodb-mysql-2.4.0文件夾中生成的lib文件夾複製到odb-examples-2.4.0\c++11\lib即可,目錄如下:
在這裏插入圖片描述
這裏需要右鍵“c++11-mysql-vc12”,打開屬性對話框,在“VC++ 目錄”中,添加庫目錄的路徑,如下所示:
在這裏插入圖片描述
最後編譯成功,如下所示:
在這裏插入圖片描述
因爲工程中,需要的鏈接庫,都已經配置好,所以只需要將鏈接庫的目錄配置好即可。

第四步,生成數據庫表
在第三步中,已經生成了employee.sql文件,在mysql管理工具中,將表生成出來,這裏用的是Mavicat for MySQL工具。
生成的表結構如下所示:
在這裏插入圖片描述

最後一步,修改數據庫連接代碼
發現源代碼中,是通過啓動時傳遞argc和argv方式傳遞數據庫連接信息,不方便調試,所以可以直接修改這部分代碼。
源代碼如下:

    unique_ptr<database> db (create_database (argc, argv));

直接改成

unique_ptr<database> db(
	new odb::mysql::database(
		"root"            // 數據庫登錄名
		, "123456"        // 數據庫登錄密碼
		, "mysqltest"     // 數據庫名稱
		, "127.0.0.1"     // 數據庫連接地址
		, 3306            // 數據庫連接端口
	));

編譯完成後,運行生成的exe,會提示找不到odb-mysql-d等一系列動態鏈接庫,只需要將上面步驟中生成的.dll文件和mysql中對應的.dll文件複製到exe同級目錄即可。
運行結果如下:
在這裏插入圖片描述
數據庫中已經有數據了,如下所示:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章