windows 10 64位环境下codeblocks+wxWidgets+mysql++数据库开发环境搭建

内容概要

    • 开发环境
    • 编译安装
    • 调试错误
      • 1.无法正常连接MySQL服务器
      • 2.无法正常查询SQL语句
      • 3. mysql.h 找不到 SOCKET 定义
      • 4. 其他注意事项

开发环境

操作系统:            windows 10 x64
集成开发环境:     code blocks 17.12
64位编译器:        mingw32-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0版本
mysql连接器:     mysql-connector-c-6.1.0-winx64.msi
mysql开发包:     mysql++3.2.4

编译安装

  1. 下载 Mingw32-w64 开发包 并安装
  2. 下载 MySQL++ 开发包 并解压
  3. 下载 mysql-connector-c-6.1.0-winx64.msi 并安装到C盘
  4. 打开命令行,进入mysql+±3.2.4 解压目录 输入 mingw32-make -f Makefile.mingw 开始编译 mysql++
  5. 编译成功后,在 mysql+±3.2.4 源代码目录中会看到下面四个文件
libmysqlpp.a
libmysqlpp_excommon.a
libmysqlpp_ssqls2parse.a
mysqlpp.dll
  1. 在工程目录中新建一个 lib目录,将上面.a 文件拷贝到里面
  2. 配置工程依赖的lib库和搜索路径,如下图所示:
    windows 10 64位环境下codeblocks+wxWidgets+mysql++数据库开发环境搭建_第1张图片
    windows 10 64位环境下codeblocks+wxWidgets+mysql++数据库开发环境搭建_第2张图片
    windows 10 64位环境下codeblocks+wxWidgets+mysql++数据库开发环境搭建_第3张图片
  3. 拷贝 mysql connector/c 6.1 安装目录中的 libmysql.lib, mysqlclient.lib 文件到 工程lib 文件中
  4. 拷贝 mysqlpp.dll, libmysql.dll (在 mysql connector/c 6.1 目录中) 文件到 工程可执行文件 的 bin 目录中

调试错误

1.无法正常连接MySQL服务器

[debug]Thread 1 received signal SIGSEGV, Segmentation fault.
[debug]0x000000006b3c4acc in mysqlpp::DBDriver::connect_prepare (this=0xc036d0) at lib/dbdriver.cpp:107
[debug]D:\work_c++\mysql++-3.2.4\lib\dbdriver.cpp:107:2738:beg:0x6b3c4acc

错误原因: 本地安装的MySQL服务器 是 win-x64-8.0 版本, 而编译 MySQL++ 采用的lib库是5.7 版本. 版本不兼容引起的.
解决办法: 卸载8.0版本 MySQL服务器,重新下载5.7版本的 MySQL服务器安装包 重新安装

2.无法正常查询SQL语句

[debug]Thread 1 received signal SIGSEGV, Segmentation fault.
[debug]0x00007fff8de481ed in mysql_send_query () from D:\work_c++\rocket\bin\Debug\libmysql.dll

错误原因: 代码本身引起的错误,虽然能编译通过,但是执行的时候会爆段错误,由指针引起的
解决办法: 修正指针引起的段访问错误

// 错误的代码
mysqlpp::Connection conn = new mysqlpp::Connection("test","127.0.0.1","root","root");
mysqlpp::Query query = conn.query("select * from stock");
// 正确代码一
mysqlpp::Connection conn("test","127.0.0.1","root","root");
mysqlpp::Query query = conn.query("select * from stock");
// 正确代码二
mysqlpp::Connection *conn = new mysqlpp::Connection("test","127.0.0.1","root","root");
mysqlpp::Query query = conn->query("select * from stock");

3. mysql.h 找不到 SOCKET 定义

C:\Program Files\MySQL\MySQL Connector C 6.1\include\mysql.h|67|error: 'SOCKET' does not name a type|
C:\Program Files\MySQL\MySQL Connector C 6.1\include\mysql_com.h|320|note: in expansion of macro 'my_socket'|

错误原因: mysql 官方提供的 connector/c 6.1 有很多个版本, 6.1.0, 6.1.1, 6.1.5, 6.1.10,经过不断验证,在G++编译器中只有 6.1.0 能正常工作, 而且还要修正上面的 SOCKET 类型错误, SOCKET 类型错误,是因为在 windows G++编译环境下 没有引入 头文件的缘故
解决办法:在 mysql.h 文件中

#ifdef __LCC__
#include  
#endif

如上依葫芦画瓢 增加下面G++编译器条件宏指令,使得windows G++编译环境下,也包含文件

#ifdef __GNUC__
#include 
#endif

4. 其他注意事项

codeblock 自带的 mingw 编译环境是 32位的,因此需要从网上下载 64位的 mingw,并重新配置 compiler 和 debugger 选项,如下图所示,否则会引起不必要的麻烦.
windows 10 64位环境下codeblocks+wxWidgets+mysql++数据库开发环境搭建_第4张图片

你可能感兴趣的:(编程杂记,mysql++,wxWidgets,mingw-w64,codeblocks,开发环境)