本文以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详细过程相关推荐

  1. 安装MikTex并成功编译中文PPT模板详细过程

    1 简介 本文以图文并貌的方式详细介绍了在全新的环境中安装MikTex支持中文,并成功编译PPT的整个流程.通过本文的阅读,能够在一定程序上解决LaTeX下中文显示及PPT编译的问题. 2 安装Mik ...

  2. 编译Linux内核的详细过程

    http://g.51cto.com/linux/67316 1.准备源码 最新的源码可以从kernel.org上获取,如当前最新版本为2.6.31: $ wget http://oss.ustc.e ...

  3. 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_ ...

  4. VS2019编译MQTT库 C/C++(超详细,含示例工程)

    目录 前言 一.前期准备 1.1 获取mqtt库 1.2 安装openssl 1.3 安装cmake-gui 二.生成C工程代码 三.编译C库 3.1 创建工程目录 3.2 修改输出目录 四.生成C+ ...

  5. Quartus II从建工程、绘图、编译到仿真详细过程

    1.建工程文件存放路径.先在某个盘下新建一个存放工程的文件夹,名字最好用英文,不要出现空格. 2.新建工程.打开Quartus II软件(我用的是9.1版本),File-->New Projec ...

  6. vs2019编译obs源码生成sln解决方案

    目录 一.OBS介绍 二.OBS源码下载 三.Qt配置 四.设置依赖库目录 五.开始编译 六.main函数 七.视频教程 一.OBS介绍   obs的编译不是很难,只要代码下的全,环境变量配的ok, ...

  7. 在 Mac OSX 版的 LispBox 环境上安装配置 SBCL 详细过程

    2019独角兽企业重金招聘Python工程师标准>>> 在 Mac OSX 版的 LispBox 环境上安装配置 SBCL 详细过程 今天在OSX版的 LispBox(使用CCL) ...

  8. STM32F0xx_EXIT中断配置详细过程

    Ⅰ.概述 EXIT外部中断在使用到按键或者开关控制等应用中比较常见,低功耗中断唤醒也是很常见的一种.因此,EXIT在实际项目开发中也是比较常见的一种. STM32F0中外部中断EXIT属于中断和事件的 ...

  9. vs2019 编译 WRK 踩坑记录

    一.回顾 上一篇博客介绍了命令行编译 WRK 到调试的所有步骤,理论上我们已经可以开始学习了. 但是 IDE 可以方便的查找和修改函数,好处多多,所以这篇博客介绍如何使用 visual studio ...

  10. C++ 源代码到可执行代码的详细过程 ?

    C++ 源代码到可执行代码的详细过程 编译 编译预处理(Preprocessing) [析] 伪指令主要包括以下四个方面 (1)宏定义指令,如#define Name TokenString,#und ...

最新文章

  1. 多传感器融合(算法)综述
  2. A+B Problem
  3. nboot,eboot和uboot
  4. 2656: [Zjoi2012]数列(sequence)(递归+高精度)
  5. 有关UNLIMITED TABLESPACE权限
  6. 网银无法登录解决办法
  7. 在vscode使用editorconfig的正确姿势
  8. bzoj3212 pku3468 A Simple Problem with Integers
  9. android获取根视图
  10. Java之dead code——无用代码
  11. R语言分类变量独立性检验(Tests of independence)、使用Fisher精确检验fisher.test函数检验分类变量的独立性( test of independence)
  12. 端子排延时中间继电器DZS-822/DC110V
  13. python语言编程培训班价值有多大?
  14. 系统解剖学 | 神经系统 | 核上瘫和核下瘫
  15. BurpSuite学习:在火狐浏览器使用foxyproxy添加代理127.0.0.1后无法正常上网
  16. Java实现PDF模板套打(证书)
  17. docker下redis清理缓存
  18. css3马赛克西瓜js特效代码
  19. 谁发明了计算机科学bug,为什么计算机故障被称为“bug”
  20. 响应式网页设计(3)

热门文章

  1. 学会PDF转Word,PDF编辑不再是问题!
  2. 组策略管理(关闭UAC)
  3. 泛泰A860版本的识别
  4. 常见电脑蓝屏代码以及解决办法
  5. Windows 错误报告
  6. 图像传感器(智能相机技术)
  7. 传承百年经典的瑞吉管家静待您的优雅旅程再次开启
  8. 他们都来全球边缘计算大会了,就差你了!
  9. 如何在批处理/ cmd中“注释掉”(添加注释)?
  10. android 印章,android 印章 控件