mingw环境添加mysql开发库
今天碰巧要用到mysql进行开发,在windows的mingw平台。
0.下载mysql
http://cdn.mysql.com/Downloads/MySQL-5.1/mysql-noinstall-5.1.73-win32.zip
下载这个绿色版的。然后解压到D盘下,复制一份ini配置文件,修改部分选项,并启动服务,详细看我以前的博客
http://www.cnblogs.com/wunaozai/p/3641589.html
1.开发安装完了之后就进行开发,下面这个是一个示例程序
1 #include <stdio.h> 2 #include <windows.h> 3 #include <mysql.h> 4 #include <winsock2.h> 5 6 int main(int argc,char *argv[]) 7 { 8 MYSQL conn; 9 int res; 10 mysql_init(&conn); 11 if(mysql_real_connect(&conn,"localhost","root","","test",0,NULL,CLIENT_FOUND_ROWS)) //"root":数据库管理员 "":root密码 "test":数据库的名字 12 { 13 printf("connect success!\n"); 14 res=mysql_query(&conn,"insert into test values('user','123456')"); 15 if(res) 16 { 17 printf("error\n"); 18 } 19 else 20 { 21 printf("OK\n"); 22 } 23 mysql_close(&conn); 24 } 25 return 0; 26 }
要把mysql安装程序中的include复制到开发环境中。然后还有构造一个libmysql.a这种静态链接库。
官方mysql的win发行版是由vc编译,产生的lib无法被mingw链接。链接时会抛出未定义错。
具体的办法如下 在include文件夹中复制 libmysql.def 到 lib目录,在lib目录执行下面这句
dlltool --input-def libmySQL.def --dllname libmySQL.dll --output-lib libmysql.a -k (dlltool 工具是mingw自带)
此时会生成一个libmysql.a文件。然后把这个文件复制到开发环境中,就基本是可以了。
我们弄好了这些后就编译一下,
g++ main.cpp -o main.exe -Iinclude -L. -lws2_32 -lmysql
居然会出现这种错误
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\cc8HIzrA.o:main.cpp:(.text+0x68): undefined reference to `mysql_init@4' C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\cc8HIzrA.o:main.cpp:(.text+0xb1): undefined reference to `mysql_real_connect@32' C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\cc8HIzrA.o:main.cpp:(.text+0xdf): undefined reference to `mysql_query@8' C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\cc8HIzrA.o:main.cpp:(.text+0x11d): undefined reference to `mysql_close@4' collect2.exe: error: ld returned 1 exit status make: *** [main] Error 1
解决如下
打开libmysql.def修改对应出错的地方如
就像这样,在后面手动增加数字,然后重复上面的操作,重新用dlltool生成一次libmysql.a链接库
到这里就可以用了。
参考资料
http://www.cnblogs.com/cy163/archive/2009/10/03/1577812.html
作者:无脑仔的小明 出处:http://www.cnblogs.com/wunaozai/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 如果文中有什么错误,欢迎指出。以免更多的人被误导。有需要沟通的,可以站内私信,文章留言,或者关注“无脑仔的小明”公众号私信我。一定尽力回答。 |