Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 18151|回复: 0

VC连接mysql数据库错误:libmysql.lib : fatal error LNK1113: invalid machine 解决方法

[复制链接]
  • TA的每日心情
    奋斗
    3 天前
  • 签到天数: 802 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726006
    发表于 2021-4-13 15:39:40 | 显示全部楼层 |阅读模式

    VC连接MySQL的配置过程在上一篇博文中,不过当你设置好,以为万事大吉的时候,运行却出现这个错误:libmysql.lib : fatal error LNK1113: invalid machine type。 无效的机器类型,真的是很让人捉急。

     

    发生这个错误的原因是,我在win8.1上安装的是64bit的mysql服务器,而我编译32位的VC程序,连接的是64位的libmysql.lib库,所以会产生 “无效的机器类型(invalid machine type)”的错误提示。

    对于这个“error LNK1113”错误的解决方案是:

       下载32位的mysql的zip包,大概100多M的那个。解压出来,把lib目录按照,第4步定位lib。这样的话,我们的32位程序编译的时候,链接的就是32位的库,就不会出现上面的链接错误了。也不必换到xp系统上去操作了。

    环境说明:

    操作系统:windows 8.1

    开发工具:VC++6.0

    开发的exe:32位程序

    数据库服务器:64位的mysql-5.5

    引用的数据库lib:32位的mysql-5.7.10-win32.zip(320M)的lib文件夹。

     

    步骤如下:

    1.  到官网www.mysql.com下载MySQL安装包:

       mysql-5.7.10-win32.zip  地址:http://dev.mysql.com/downloads/mysql/

       当然你也可以下载安装mysql*.msi。

    2.  安装mysql,在安装过程中如(如果是.msi安装),一定要选上C Include Files / Lib Files,这样在安装后才能在mysql的安装文件夹中找到include和lib文件夹,这些文件夹将在下面的操作用会用到。

    3.  把D:\Mysql32\mysql-5.7.10-win32\lib下的libmysql.dll复制并拷贝到C:\WINDOWS\system32下。(这一步我没有做,一样可以编译通过,我是在WIN8.1下验证的,不知在XP或是win-NT中是否需要这一步)。

    4. 这也是最关键的一步!打开:工具->选项菜单,找到“目录”标签,可以看到有一个:“显示目录为”的下拉框,选择Library files选项,在其中加入: 【32位的mysql zip解压文件夹】\MySQLServer 5.7\lib\,如图:

       

     

        可以看到我这个是32位的lib

    5.如果你把libmysql.lib,libmysql.dll复制到程序目录下,别忘了用你下的32位的文件替换原来的。

    6.编译运行,成功。

       只需要用32位的lib替换64位的lib,这样的话,我们的32位程序编译的时候,链接的就是32位的库,就不会出现上面的链接错误了。

      解决方法还是很简单的,就是下载zip包太慢啦。。。。

    // test.cpp : Defines the entry point for the console application.
    //
    #include <stdio.h>
    #include <windows.h>
    #include "StdAfx.h"
    
    #include <winsock.h>  
    #include <iostream>  
    #include <string>  
    #include <mysql.h>  
    using namespace std;  
    //#pragma comment (lib,"ws2_32.lib")  
    //#pragma comment(lib,"libmysql.lib")  
    //不需要单步调试的就注释掉  
    //#define STEPBYSTEP  
      
    void pause(){  
      
        #ifdef STEPBYSTEP  
            system("pause");  
        #endif  
    }  
    void writeToFile(const char *s)  
    {  
      
         FILE *fp=fopen("info.txt","rw");  
         fprintf(fp,s);  
         fclose(fp);  
      
    }  
     /* int main()
    
    {
    
           MYSQL mysql;
           mysql_init(&mysql); //初始化mysql结构
    
           if(!mysql_real_connect(&mysql,"localhost","myuser","123456","student_db",3306,NULL,0))
                  printf("\n连接数据库时发生错误!\n");
           else
                  printf("\n连接数据库成功!\n");
    
           mysql_close(&mysql); //释放数据库
      
           return 0;
    }*/
    int main(int argc, char* argv[]){  
      
        cout<<"start...."<<endl;  
        pause();  
        MYSQL mysql;  
        if(0==mysql_library_init(0,NULL,NULL))  
        {  
            cout<<"mysql_library_init succeed"<<endl;  
      
        }else{  
            cout<<"mysql_library_init failed"<<endl;  
            return -1;  
        }  
        pause();  
        if(NULL!=mysql_init(&mysql))  
        {  
      
            cout<<"mysql_init succeed"<<endl;  
        }else{  
            cout<<"mysql_init failed"<<endl;  
            return -1;  
        }  
        pause();  
        if(0==mysql_options(&mysql,MYSQL_SET_CHARSET_NAME,"gb2312"))  
        {  
      
            cout<<"mysql_option succeed"<<endl;  
        }else{  
            cout<<"mysql_option failed"<<endl;  
            return -1;  
        }  
        pause();  
      
        if(NULL!=mysql_real_connect(&mysql,"localhost","myuser","123456","student_db",3306,NULL,0))  
        {  
      
            cout<<"mysql_real_connect succeed"<<endl;  
        }else{  
            cout<<"mysql_real_connect failed"<<endl;  
            return -1;  
        }  
        pause();  
        string sql;  
        
        sql="select * from sgroup";  
        MYSQL_RES *result=NULL;  
        if(0==mysql_query(&mysql,sql.c_str()))  
        {  
      
                cout<<"mysql_query select succeed"<<endl;  
                result=mysql_store_result(&mysql);  
                int rowcount=mysql_num_rows(result);  
                cout<<"row count:"<<rowcount<<endl;  
                unsigned int fieldcount=mysql_num_fields(result);  
                MYSQL_FIELD *field=NULL;  
                for(unsigned int i=0;i<fieldcount;i++)  
                {  
      
                    field=mysql_fetch_field_direct(result,i);  
                    cout<<field->name<<"\t\t";  
                }  
                cout<<endl;  
                MYSQL_ROW row=NULL;  
                row=mysql_fetch_row(result);  
                while(NULL!=row)  
                {  
      
                    for(int i=0;i<fieldcount;i++){  
      
                        cout<<row<<"\t\t";  
      
                    }  
                    cout<<endl;  
                    row=mysql_fetch_row(result);  
      
                }  
        }else{  
      
                cout<<"mysql_query select data failed"<<endl;  
                mysql_close(&mysql);  
                return -1;  
        }  
        pause();  
        /*sql="drop table user_info";  
        if(0==mysql_query(&mysql,sql.c_str()))  
        {  
      
                cout<<"mysql_query drop table succeed"<<endl;  
        }else{  
                cout<<"mysql_query drop table failed"<<endl;  
                mysql_close(&mysql);  
                return -1;  
      
        }  */
        mysql_free_result(result);  
        mysql_close(&mysql);  
        mysql_server_end();  
      
      
        system("pause");  
        return 0;  
    } 
    

      

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-11-14 06:13 , Processed in 0.064959 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表