zoukankan      html  css  js  c++  java
  • 为 DEVC++ 生成 libmysql.a 的过程 及 windows下 devc++ c语言访问mysql数据库 环境配置

    本文内容包括两部分:

    一。 为 DEV-C++ 生成 libmysql.a 的过程

    二。windows下 devc++ c语言访问mysql数据库 环境配置

      

    一。为 DEV-C++ 生成 libmysql.a 的过程

    目的:因为DEV-C++ 使用的编译器是gcc, MySQL自带的libmysql.dll 只支持Visual Stdio。为此,需要从libmysql.dll 生成libmysql.a

     

    使用的命令是:

     

    Dlltool  --input-def   libmySQL.def  --dllname  libmySQL.dll  --output-lib libmySQL.a -k

     

    为使上一命令正确执行,需要注意以下几点:

    (1)       dlltoll.exe  存在于 DEV-C++ 目录下(C:\Program Files\DEV-CPP\mingw32\bin);而 libmySQL.def libmySQL.dll 存在于 MySQL目录下。首先需要把libmySQL.def libmySQL.dll 拷贝到dlltoll.exe 所在的目录。而不是相反,把dlltoll.exe 拷贝 MySQL目录下libmySQL.dll所在的目录。这是 因为libmySQL.dll  的全路径上,有 “MySQL server 5.1”,中间有空格,这会影响 dlltool 命令的执行,产生错误信息

     考虑到 dlltoll.exe 存在于 C:\Program Files\DEV-CPP\mingw32\bin中,因此可以把 libmySQL.dll 拷贝到此目录

    …….installation problem Cannot exec ‘as’

     

    (2) 上一命令中的libmySQL.def 不是,MySQL安装后即存在的那个文件。而是必须使用下面的命令,基于libmysql.lib 生成。

     

       Reimp  -d   libmysql.lib (似乎reimp 并不包含在DEV-C的安装包中,需要另外下载)

     

    可以通过比较新生成的 libmySQL.def   在另一目录下的 MySQL 自带的同名文件的大小,发现两者是不同的。若错误地使用MySQL 自带的libmySQL.def文件,执行dlltool命令时会出现一系列类似下面的错误信息。

     

    undefined reference to `mysql_real_query@12'

       Reimp包含在 mingw-utils中,因此需要下载  mingw-utils。 

    注:如果在DEV-C中的 Project ---Project Option --- Parameters Linker 中不指定 libmySQL.a 的全路径,也会出现类似

    undefined reference to `mysql_init@4' 这样的错误。

     

    (3) 生成libmySQL.a 后,还需要在DEV-C++ ‘Project Option’ | Compiler Options | Linker Sheet linker 一栏添上libmySQL.a 的全路径(含文件名)。

      

      

      

    二.  windows下 devc++ c语言访问mysql数据库 环境配置

    参考了以下两篇文章

    (1) http://hi.baidu.com/leeyou1450/blog/item/78fdd438ec9986f63a87ceaa.html

    (2) http://hi.baidu.com/leeyou1450/blog/item/ede27dd8f488bdec39012fa9.html

    但是虽然自己也是用的 DEV-C 4.9.9.2版,WindowsXP系统,按照这两篇文章的指示设置却不成功,对其进行了一些改进。具体情况如下。

    a) 要想在程序中使用mysql数据库,需要在

      Project |‘Project Option’ | Compiler Options | Linker Sheet 在linker 一栏添上libmySQL.a 的全路径

      

    b) 想在程序中使用多线程,需要在 Project | Project Option’ | Compiler Options | Linker Sheet 在linker 一栏添上

       C:\Program Files\DEV-CPP\Lib\libws2_32.a (据网上文章说 同目录下的文件 libwsock32.a 是旧版,因此应用libws2_32.a)

      

    c) 有网文推荐 在 Project |‘Project Option’ | Compiler Options |的 Copliler 和 C++ Compiler 框中添加

        -Wall 和-W

      

    d) 在 Project |‘Project Option’ | Directories | Include Directories 下添加

       C:\Program Files\MySQL\mysql-5.1.38-win32\include

      这样在 xxx.cpp文件中才可以包含 #include "mysql.h"。

        奇怪的是,在 Tools---Compiler Options---Directories --- C Includes 或 C++ Includes中包含

         C:\Program Files\MySQL\mysql-5.1.38-win32\include

       不起作用

     

    e) Tools---Compiler Options---Directories---Libraries 下添加

        C:\Program Files\MySQL\mysql-5.1.38-win32\lib\opt

     

    可以用下面的代码测试DEV-C的环境设置是否正确

     

    #include <cstdlib>
    #include <iostream>
    
    
    using namespace std;
    #include <windows.h>
    #include "mysql.h"
    #include <stdio.h>
    #include <stdlib.h>
    #include <winsock.h>
    /*
    int main()
    {
      WSADATA wsadata; 
      
      WSAStartup(0x101, (LPWSADATA)& wsadata);
    
      system("PAUSE");
      return 0;
    }
    */
    
    int main() 
    
    { 
    
           MYSQL mysql;      //mysql连接 
    
           MYSQL_RES *res; //这个结构代表返回行的一个查询结果集 
    
           MYSQL_ROW row; //一个行数据的类型安全(type-safe)的表示 
    
           char *query; //查询语句 
    
           int t,r; 
    
           mysql_init(&mysql); 
    
           if (!mysql_real_connect(&mysql,"localhost", "root", "", "mysql",3306,NULL,0)) 
    
           { 
    
              printf( "Error connecting to database%s\n",mysql_error(&mysql)); 
    
           } else 
    
              printf("Connected...\n"); 
    
           query="SET CHARACTER SET GBK"; //设置编码 
    
           t=mysql_real_query(&mysql,query,(unsigned int)strlen(query)); 
    
           if(t) 
    
           { 
    
                printf("编码设置失败\n"); 
    
           } 
    
           query=" select * from user "; 
    
           t=mysql_real_query(&mysql,query,(unsigned int)strlen(query)); 
    
           if(t) 
    
           { 
    
               printf("执行查询时出现异常: %s",mysql_error(&mysql)); 
    
           }else 
    
               printf("[%s] 构建成功 \n",query); 
    
           res=mysql_store_result(&mysql); 
    
           while(row=mysql_fetch_row(res)) 
    
           {                               
    
                for(t=0;t <mysql_num_fields(res);t++) 
    
                { 
    
                    printf("%s:   ",row[t]); 
    
                } 
    
                printf("\n"); 
    
           } 
    
           mysql_free_result(res); 
    
           //sleep(1); 
           scanf("%d",&t); 
    
           return 0; 
    
    }
    
  • 相关阅读:
    proc文件系统
    sysfs文件系统
    linux 下 进程和线程的区别
    Linux内核中常见内存分配函数
    内核空间与用户空间的通信方式
    DoDataExchange函数,UpdateData(TRUE)和UpdateData(FALSE)的区别
    C# 获取文件路径
    C# WinForm 中 MessageBox的使用详解
    C#对于文件操作
    线程间操作无效: 从不是创建控件的线程访问它。
  • 原文地址:https://www.cnblogs.com/cy163/p/1584155.html
Copyright © 2011-2022 走看看