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同级目录即可。
运行结果如下:
数据库中已经有数据了,如下所示:
VS2019 编译 odb-mysql2.4详细过程相关推荐
- 安装MikTex并成功编译中文PPT模板详细过程
1 简介 本文以图文并貌的方式详细介绍了在全新的环境中安装MikTex支持中文,并成功编译PPT的整个流程.通过本文的阅读,能够在一定程序上解决LaTeX下中文显示及PPT编译的问题. 2 安装Mik ...
- 编译Linux内核的详细过程
http://g.51cto.com/linux/67316 1.准备源码 最新的源码可以从kernel.org上获取,如当前最新版本为2.6.31: $ wget http://oss.ustc.e ...
- mingw版本下qt与HTML,QT5.10开发(2) 在Windows 10下使用MinGW编译 静态Qt 5.10 release版 详细过程...
Qt建议安装动态链接Dbug版和编译安装静态链接release版 前提: 先安装动态链接Dbug版,方法:QT5.10开发(1)安装QT5.10 地址:http://blog.csdn.net/qq_ ...
- VS2019编译MQTT库 C/C++(超详细,含示例工程)
目录 前言 一.前期准备 1.1 获取mqtt库 1.2 安装openssl 1.3 安装cmake-gui 二.生成C工程代码 三.编译C库 3.1 创建工程目录 3.2 修改输出目录 四.生成C+ ...
- Quartus II从建工程、绘图、编译到仿真详细过程
1.建工程文件存放路径.先在某个盘下新建一个存放工程的文件夹,名字最好用英文,不要出现空格. 2.新建工程.打开Quartus II软件(我用的是9.1版本),File-->New Projec ...
- vs2019编译obs源码生成sln解决方案
目录 一.OBS介绍 二.OBS源码下载 三.Qt配置 四.设置依赖库目录 五.开始编译 六.main函数 七.视频教程 一.OBS介绍 obs的编译不是很难,只要代码下的全,环境变量配的ok, ...
- 在 Mac OSX 版的 LispBox 环境上安装配置 SBCL 详细过程
2019独角兽企业重金招聘Python工程师标准>>> 在 Mac OSX 版的 LispBox 环境上安装配置 SBCL 详细过程 今天在OSX版的 LispBox(使用CCL) ...
- STM32F0xx_EXIT中断配置详细过程
Ⅰ.概述 EXIT外部中断在使用到按键或者开关控制等应用中比较常见,低功耗中断唤醒也是很常见的一种.因此,EXIT在实际项目开发中也是比较常见的一种. STM32F0中外部中断EXIT属于中断和事件的 ...
- vs2019 编译 WRK 踩坑记录
一.回顾 上一篇博客介绍了命令行编译 WRK 到调试的所有步骤,理论上我们已经可以开始学习了. 但是 IDE 可以方便的查找和修改函数,好处多多,所以这篇博客介绍如何使用 visual studio ...
- C++ 源代码到可执行代码的详细过程 ?
C++ 源代码到可执行代码的详细过程 编译 编译预处理(Preprocessing) [析] 伪指令主要包括以下四个方面 (1)宏定义指令,如#define Name TokenString,#und ...
最新文章
- 多传感器融合(算法)综述
- A+B Problem
- nboot,eboot和uboot
- 2656: [Zjoi2012]数列(sequence)(递归+高精度)
- 有关UNLIMITED TABLESPACE权限
- 网银无法登录解决办法
- 在vscode使用editorconfig的正确姿势
- bzoj3212 pku3468 A Simple Problem with Integers
- android获取根视图
- Java之dead code——无用代码
- R语言分类变量独立性检验(Tests of independence)、使用Fisher精确检验fisher.test函数检验分类变量的独立性( test of independence)
- 端子排延时中间继电器DZS-822/DC110V
- python语言编程培训班价值有多大?
- 系统解剖学 | 神经系统 | 核上瘫和核下瘫
- BurpSuite学习:在火狐浏览器使用foxyproxy添加代理127.0.0.1后无法正常上网
- Java实现PDF模板套打(证书)
- docker下redis清理缓存
- css3马赛克西瓜js特效代码
- 谁发明了计算机科学bug,为什么计算机故障被称为“bug”
- 响应式网页设计(3)