• 为 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;
    }
  • 相关阅读:
    java中的位运算符
    Servlet中的初始化参数、上下文参数、以及@Resource资源注入
    Servlet中文件上传的几种方式
    marquee标签的使用
    SpringBoot热部署的两种方式
    eclipse中安装lombok插件
    关于Servlet中的转发和重定项
    Cormen — The Best Friend Of a Man CodeForces 732B
    牛客小白月赛9之签到题
    Codeforces アンバランス / Unbalanced
  • 原文地址:https://www.cnblogs.com/top5/p/1958093.html
Copyright © 2020-2023  润新知