转载

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

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/,如图:

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

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

5.编译运行,成功。

只需要用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[i]<<"/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;   }

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

原文  http://www.cnblogs.com/jycboy/p/5170751.html
正文到此结束
Loading...