windows 10 64位環境下codeblocks+wxWidgets+mysql++數據庫開發環境搭建

開發環境

操作系統:            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庫和搜索路徑,如下圖所示:
    配置lib庫
    配置搜索路徑
    配置linker搜索路徑
  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++編譯環境下 沒有引入 <winsock2.h> 頭文件的緣故
解決辦法:在 mysql.h 文件中

#ifdef __LCC__
#include <winsock2.h> 
#endif

如上依葫蘆畫瓢 增加下面G++編譯器條件宏指令,使得windows G++編譯環境下,也包含<winsock2.h>文件

#ifdef __GNUC__
#include <winsock2.h>
#endif

4. 其他注意事項

codeblock 自帶的 mingw 編譯環境是 32位的,因此需要從網上下載 64位的 mingw,並重新配置 compiler 和 debugger 選項,如下圖所示,否則會引起不必要的麻煩.
配置mingw32-x64 環境

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