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[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;
}

