MinGW使用小结和链接

元谷 发布于 2013/11/15 18:22
阅读 4K+
收藏 11

一、有用的链接

 

1. TuxPaint。如果你想用mingw编译sdl,gtk,可以参考tuxpaint作者给出的文档,里面介绍了一些旧版本的mingw编译方法,很详细。

http://johnnypops.demon.co.uk/mingw/

(已废)

 

2. MozillaBuild。一个配好的命令行编译环境(包括mingw)可以参考它的方法自己定制绿色版的msys/mingw。

ftp://ftp.mozilla.org/pub/mozilla/libraries/win32

https://developer.mozilla.org/En/Developer_Guide/Build_Instructions/Windows_Prerequisites

 

3. MinGW。官方提供的支持mingw编译的软件清单。罗列了很多出名的C/C++开发库

http://www.mingw.org/wiki/Community_Supplied_Links

 

4. Haxe。说了一些mingw编译的技巧

http://haxe.org/doc/build/haxe_windows

 

5. 一些mingw的编译src 

http://www.evolane.com/download/mirror/mingw/

 

6. 一些库的mingw预编译(只包含头文件和库文件)

http://cefiro.homelinux.org/resources/mingw-repository/release/

 

7. MinGW MSys GTK Configuration Guide(话说回来GTK+的源代码是我另一个已知的难编译的库,至今仍没成功用mingw编译过)

http://gcam.js.cx/index.php/MinGW_MSys_GTK_Configuration_Guide

 

8. PostgreSQL。它的源代码提及到一些linux专有的头文件怎么用windows平台SDK的头文件代替,对mingw移植有点帮助(因为mingw支持直接用windows的SDK头文件,用这种方法避开编译错误)。

http://www.postgresql.org/

 

 

--------------

(20100807update)

 

9. Installing MinGW, compiling Perl and vim
http://www.adp-gmbh.ch/blog/2004/october/9.html

 

10. Win32CompileMSYSNew
http://wiki.videolan.org/Win32CompileMSYSNew

 

11. EFLWindowsXP mingw build
http://trac.enlightenment.org/e/wiki/EFLWindowsXP

 

12. Wormux : Compilation using mingw (native and cross-compilation) - Documentation
http://www.wormux.org/phpboost/wiki/compilation-using-mingw-native-and-cross-compilation

 

13. MinGW cross compiling environment
http://www.nongnu.org/mingw-cross-env/#introduction

 

14. FAQ | MinGW(关于pkg-config和python)
http://www.mingw.org/wiki/FAQ

 

 ---------------------------------------

(2010-08-28 update) 

 

 

15.Logue

介绍一些可用于编译ONScripter的MinGW平台和程序库
http://logue.be/MinGW.html (旧的)

 

mingw-logue-pack

http://logue.be/MinGW

http://code.google.com/p/mingw-logue-pack/

提及以下链接(16-19)

 

 

16.qp-gcc 
http://code.google.com/p/qp-gcc/

 

17. MinGW Komisar
http://komisar.gin.by/mingw/

 

18. TDM版MinGW
http://tdm-gcc.tdragon.net/

 

19. MinGW Distro 
http://nuwen.net/mingw.html

 

 

 

20. 在windows下编译linux 0.11
http://www.oldlinux.org/oldlinux/viewthread.php?tid=11005&extra=page%3D1&page=1

 

 

21. jhbuild on windows
http://afuera.me.uk/jhbuild-windows/

 

 

22. MinGW的旧网页
http://oldwiki.mingw.org/index.php/GettingStarted

 

 

23. MinGW性能比较
http://www.interq.or.jp/japan/s-imai/tcltk/msys_mingw.html

 

 

24. MinGW安装
http://apis.jpn.ph/fswiki/wiki.cgi?page=Win32%2FCompiler%2FMinGW

 

 

25. ossbuild,包括MinGW与VS,目的是为了使用GStreamer。
下载中包含一个MSYS/MinGW编译环境。
http://code.google.com/p/ossbuild/

 

---------------------------------------

(20100831) 

26. Building GnuPG for Win32 using MinGW
http://clbianco.altervista.org/gnupg/eng/gnupg.html

 

--------------------------------------

(20100902)

27.Dev-C++

http://sourceforge.net/projects/dev-cpp/ 

http://www.inf.pucrs.br/~grv/Pong2/Dev-C++/Bin/

 

28. msysDVLPR-1.0.0 / HOWTO Create an MSYS Build Environment

http://www.mingw.org/wiki/HOWTO_Create_an_MSYS_Build_Environment

 

29. MinGWとEclipse CDT

http://blog.livedoor.jp/dq_school/archives/1321067.html

http://blog.livedoor.jp/dq_school/archives/1322435.html

 

30.  i18n-zh

http://code.google.com/p/i18n-zh

 

------------------------------------

(20101212)

 

31. mplayer编译工具链

http://oss.netfarm.it/mplayer-win32.php

http://sourceforge.net/projects/mplayer-win32/files/Toolchain/20080717/

http://sourceforge.net/projects/mplayer-win32/files/MinGW/MinGW%20BE%20gcc%204.2.5/MinGW-full-gcc-4.2.5-Dec-2010.7z/download

 

-----------------------------------------

(20110320)

 

32. RubyInstaller for Windows

https://github.com/oneclick/rubyinstaller

 

33. MozillaBuild

(准确来说MozillaBuild还集成了许多Win下的工具,包括VC的命令行,

主要用于在Windows下编译Mozilla的子项目)

https://developer.mozilla.org/en/Windows_Build_Prerequisites

(注:和前面重复了)

 

34. msys-cn

http://code.google.com/p/msys-cn/

 

35. micron

http://code.google.com/p/micron/

 

-----------------------------------------

20110409

 

36. mingw-and-ndk

http://code.google.com/p/mingw-and-ndk/

 

-----------------------------------------

20110419

 

37. Code::Blocks

http://www.codeblocks.org/home

 

38. Eclipse CDT

http://www.eclipse.org/cdt/

 

-----------------------------------------

20110707

 

39. mingwer

MinGWer is a MinGW distribution

http://code.google.com/p/mingwer/

 

 

-----------------------------------------

20120125

 

40. TakeoffGW

http://sourceforge.net/projects/takeoffgw/

 

 

(待补充...) 

 

二、使用libmysql(MySQL的C客户端)

官方没有直接给.a,要么在网上找,要么用reimp和dlltool生成,要么就直接把.lib当.o来用。

方法一:生成.exe时用现成的libmysql.a,然后使用-l编译。
例如$(CC) -o main.exe main.o -L. -lmysql

 libmysql.a下载请参考:
 http://blog.yam.com/jasonching58/article/25478748


 http://seefromus.com/browse.php?u=ff0e598c86b9f79e4T2lNamQzZDNMbTl3Wlc1M1pXSnpjR2xrWlhJdWIzSm5MMlJ2WTNWdFpXNTBZWFJwYjI0dmFHOTNMWFJ2TFd4cGJtc3RiR2xpYlhsemNXeHNhV0l0ZDJsMGFDMWtaWFl0WXkxdmNpMW5ZMk10ZFc1a1pYSXRkMmx1Wkc5M2N5OD0%3D&b=29
 你也可以自己生成libmysql.a,不过要用到reimp(需要单独去sourceforge下载),而且可能会不成功(我试了很多次都不行)。
 另外你需要自己找include目录(重新安装,选择自定义安装,然后勾选全部,装完后拷贝myssql目录下的include,然后-I指定)。


方法二:取安装包里的include和lib目录
 或者官方网站上的Connector/C
 http://dev.mysql.com/downloads/connector/c/
 然后把.lib与.o文件一起gcc即可

下面是方法二的Makefile

 

 

Makefile代码   收藏代码
  1. CC = gcc  
  2. CFLAGS = -g -I./include/   
  3.   
  4. all: main.exe  
  5.   
  6. main.exe: main.o   
  7.     $(CC) -o main.exe main.o libmysql.lib  
  8.   
  9. main.o: main.c  
  10.     $(CC) $(CFLAGS) -c -o $@ $<   
  11.   
  12. clean:  
  13.     rm -f *.o main.exe *.a  

 

 

其实还有一种(错误的)方法,把STDCALL宏中的__stdcall去掉,然后用.dll与.o一起gcc,
不过发现会在读sql时崩溃,估计是出现脏指针。对于写操作倒是没问题的(没有用脏指针)

 

下面是我测试用的main.c,来源于
http://www.cnblogs.com/linbc/archive/2009/06/15/1503924.html

 

 

C代码   收藏代码
  1. /* 
  2.  * main.c 
  3.  * 
  4.  *  Created on: 2010-8-2 
  5.  *      Author: Administrator 
  6.  */  
  7. #ifndef MAIN_H_  
  8. #define MAIN_H_  
  9.   
  10. #include <stdio.h>  
  11. #include <stdlib.h>  
  12. #include <string.h>  
  13. #include <windows.h>  
  14.   
  15. //#include <my_global.h>  
  16. #include <mysql.h>  
  17.   
  18. static char *opt_host_name = "localhost";  
  19. static char *opt_user_name = "root";  
  20. static char *opt_password = "123456";  
  21. static unsigned int opt_port_num = 3306;  
  22. static char *opt_socket_name = NULL;  
  23. static char *opt_db_name = "test";  
  24. static unsigned int opt_flags = 0;  
  25.   
  26. static MYSQL *conn;  
  27.   
  28. void print_error(MYSQL *conn, const char *title){  
  29.     fprintf(stderr,"%s:\nError %u (%s)\n",title,mysql_errno(conn),mysql_error(conn));  
  30. }  
  31.   
  32. void process_result_set(MYSQL *conn,MYSQL_RES *res_set){  
  33.     far MYSQL_ROW row;  
  34.     unsigned int i;  
  35.   
  36.     while ((row = mysql_fetch_row(res_set)) != NULL){  
  37.         for(i=0;i<mysql_num_fields(res_set);i++){  
  38.             if (i > 0)  
  39.                 fputc('\t',stdout);  
  40.             row[i] = row[i];  
  41.             printf("%1s",row[i] != NULL ? row[i] : "NULL");  
  42.         }  
  43.         fputc('\n',stdout);  
  44.     }  
  45.   
  46.     if(mysql_errno(conn) != 0)  
  47.         print_error(conn,"mysql_fetch_row() failed");  
  48.     else  
  49.         printf("%lu rows returned \n",  
  50.             (unsigned long)mysql_num_rows(res_set));  
  51. }  
  52.   
  53. int main(int argc, _TCHAR* argv[])  
  54. {  
  55.     if( (conn = mysql_init(NULL))== NULL){  
  56.         fprintf(stderr,"mysql 初始化失败(可能是内存溢出)!\n");  
  57.         exit(1);  
  58.     }  
  59.   
  60.     if(mysql_real_connect(conn,opt_host_name,opt_user_name,opt_password,  
  61.         opt_db_name,opt_port_num,opt_socket_name,opt_flags) == NULL){  
  62.   
  63.             fprintf(stderr,"mysql_real_connect 失败:\nError %u (%s)\n",  
  64.                 mysql_errno(conn),mysql_error(conn));  
  65.   
  66.             mysql_close(conn);  
  67.             exit(1);  
  68.     }  
  69.   
  70.     if(mysql_query(conn,"insert into t (num, date) values (0, now());")){  
  71.         print_error(conn,"执行插入失败");  
  72.     }else{  
  73.         printf("插入成功,受影响行数:%lu\n",(unsigned long)mysql_affected_rows(conn));  
  74.     }  
  75.   
  76.     if(mysql_query(conn,"select * from t")){  
  77.         print_error(conn,"mysql_query() error");  
  78.     }else{  
  79.         MYSQL_RES *res_set;  
  80.         res_set = mysql_store_result(conn);    /**//*生成结果集*/  
  81.         if(res_set == NULL)  
  82.             print_error(conn,"mysql_store_result failed");  
  83.         else {  
  84.             process_result_set(conn,res_set);  
  85.             mysql_free_result(res_set);  
  86.         }  
  87.     }  
  88.   
  89.     /**//*断开*/  
  90.     mysql_close(conn);  
  91.   
  92.     getchar();  
  93.     return 0;  
  94. }  
  95. #endif  

 

 

#include <my_global.h>会造成很多警告,我把它注释了,但官方说最好加上,
#include <windows.h>是为了避免找不到winsock的定义(老问题了)

 

 

 

 

 ----------------------------------------------------------------------------------------------

 

 

 

 

 

 

 

 

 

三、从源码中使用MinGW简单编译libmysql。

如果直接用mysql提供的mysqlclient.lib进行静态链接(使用mingw的gcc),会使ld崩溃而编译失败。

唯一的方法是从源代码中构建。

官方源代码包中有说明文件介绍如何用CMake配合脚本进行配置,然后用VS打开工程进行编译。

这里不讨论这种方法,而是讨论假借这种方法把工程移到makefile后的情况。

下面介绍的是在MinGW中编译libmysql(MySQL 5.1.49)简单测试上面那段代码(静态库-g链接)
(注:因为是简单测试,所以只考虑到代码中涉及的libmysql的API,
其它API在编译时可能会有更为复杂的问题)

 

 

一、下载MySQL源代码
http://www.mysql.com/downloads/mysql/
Select Platform:选择Source Code

 

二、解压缩,然后写个Makefile(是我反复修改的,
方法是把CMake后的VC2008工程libmysql.vcproj中.c文件名抽取出来,
整理后所得),如下:

 

 

Makefile代码   收藏代码
  1. PLAT= none  
  2. CC= gcc  
  3. CPP= g++  
  4.   
  5. #release : -O0 -g3 -Wall -fmessage-length=0  
  6. #debug : -O2 -g -Wall -fmessage-length=0  
  7.   
  8. # Note1: uncomment this line "MYCFLAGS= -O2 -g" if you want to debug.  
  9. #        In CDT, right click project explorer and "Clean Project" to rebuild this project.  
  10. # 如果要换成debug模式,可以解除下句的注释 ,还有下文的Note2  
  11. MYCFLAGS= -O0 -g3  
  12.   
  13. CFLAGS= $(MYCFLAGS) -Wall -fmessage-length=0 \  
  14.  -DWIN32 -D_WINDOWS -D_DEBUG -DFORCE_INIT_OF_VARS \  
  15.  -DENABLED_DEBUG_SYNC -DSAFEMALLOC -DSAFE_MUTEX -DUSE_TLS \  
  16.  -D_CRT_SECURE_NO_DEPRECATE -DWITH_CSV_STORAGE_ENGINE \  
  17.  -DWITH_HEAP_STORAGE_ENGINE -DWITH_MYISAM_STORAGE_ENGINE \  
  18.  -DWITH_MYISAMMRG_STORAGE_ENGINE -DWITH_PARTITION_STORAGE_ENGINE \  
  19.  -D_LIB -DYASSL_PREFIX -DYASSL_THREAD_SAFE -DHAVE_YASSL \  
  20.  -DCMAKE_CONFIGD -DDEFAULT_MYSQL_HOME="\"c:/Program Files/MySQL/MySQL Server 5.1/\"" \  
  21.  -DDEFAULT_BASEDIR="\"c:/Program Files/MySQL/\"" \  
  22.  -DMYSQL_DATADIR="\"c:/Program Files/MySQL/MySQL Server 5.1/data\"" \  
  23.  -DDEFAULT_CHARSET_HOME="\"c:/Program Files/MySQL/MySQL Server 5.1/\"" \  
  24.  -DPACKAGE=mysql -DSHAREDIR="\"share\"" -D__NT__ \  
  25.  -D_WIN32_WINNT=0x0501 -DCMAKE_INTDIR=\"Debug\" \  
  26.  -Dlibmysql_EXPORTS -D_WINDLL -D_MBCS \  
  27.  -DNO_OLDNAMES -DHAVE_RINT \  
  28.  -I./include -I./libmysql -I./regex -I./sql \  
  29.  -I./strings -I./zlib -I./dbug \  
  30.  -I./extra/yassl/taocrypt/mySTL \  
  31.  -I./extra/yassl/taocrypt/include \  
  32.  -I./extra/yassl/include   
  33.   
  34. CPPFLAGS = $(CFLAGS)  
  35.   
  36. LIBS=  
  37. TESTCFLAGS= $(MYCFLAGS) -Wall -fmessage-length=0 \  
  38.  -I./include  
  39. TESTLIBS = ./lib/libmysql.dll.a  
  40.   
  41. AR= ar rcu  
  42. RANLIB= ranlib  
  43. RM= rm -f  
  44.   
  45. OBJECTS= zlib/adler32.o \  
  46. zlib/compress.o \  
  47. zlib/crc32.o \  
  48. zlib/deflate.o \  
  49. zlib/gzio.o \  
  50. zlib/infback.o \  
  51. zlib/inffast.o \  
  52. zlib/inflate.o \  
  53. zlib/inftrees.o \  
  54. zlib/trees.o \  
  55. zlib/uncompr.o \  
  56. zlib/zutil.o \  
  57. sql-common/client.o \  
  58. sql-common/my_time.o \  
  59. sql-common/pack.o \  
  60. sql/net_serv.o \  
  61. sql/password.o \  
  62. strings/bchange.o \  
  63. strings/bmove.o \  
  64. strings/bmove_upp.o \  
  65. strings/ctype-big5.o \  
  66. strings/ctype-bin.o \  
  67. strings/ctype-cp932.o \  
  68. strings/ctype-czech.o \  
  69. strings/ctype-euc_kr.o \  
  70. strings/ctype-eucjpms.o \  
  71. strings/ctype-extra.o \  
  72. strings/ctype-gb2312.o \  
  73. strings/ctype-gbk.o \  
  74. strings/ctype-latin1.o \  
  75. strings/ctype-mb.o \  
  76. strings/ctype-simple.o \  
  77. strings/ctype-sjis.o \  
  78. strings/ctype-tis620.o \  
  79. strings/ctype-uca.o \  
  80. strings/ctype-ucs2.o \  
  81. strings/ctype-ujis.o \  
  82. strings/ctype-utf8.o \  
  83. strings/ctype-win1250ch.o \  
  84. strings/ctype.o \  
  85. strings/int2str.o \  
  86. strings/is_prefix.o \  
  87. strings/my_strtoll10.o \  
  88. strings/llstr.o \  
  89. strings/longlong2str.o \  
  90. strings/my_vsnprintf.o \  
  91. strings/str2int.o \  
  92. strings/str_alloc.o \  
  93. strings/strcend.o \  
  94. strings/strcont.o \  
  95. strings/strend.o \  
  96. strings/strfill.o \  
  97. strings/strinstr.o \  
  98. strings/strmake.o \  
  99. strings/strmov.o \  
  100. strings/strnlen.o \  
  101. strings/strnmov.o \  
  102. strings/strtod.o \  
  103. strings/strtoll.o \  
  104. strings/strtoull.o \  
  105. strings/strxmov.o \  
  106. strings/strxnmov.o \  
  107. strings/xml.o \  
  108. vio/vio.o \  
  109. vio/viosocket.o \  
  110. vio/viossl.o \  
  111. vio/viosslfactories.o \  
  112. dbug/dbug.o \  
  113. dbug/factorial.o \  
  114. dbug/sanity.o \  
  115. mysys/array.o \  
  116. mysys/charset-def.o \  
  117. mysys/charset.o \  
  118. mysys/default.o \  
  119. mysys/errors.o \  
  120. mysys/hash.o \  
  121. mysys/my_sleep.o \  
  122. mysys/default_modify.o \  
  123. mysys/list.o \  
  124. mysys/mf_arr_appstr.o \  
  125. mysys/mf_cache.o \  
  126. mysys/mf_dirname.o \  
  127. mysys/mf_fn_ext.o \  
  128. mysys/mf_format.o \  
  129. mysys/mf_iocache.o \  
  130. mysys/mf_iocache2.o \  
  131. mysys/mf_loadpath.o \  
  132. mysys/mf_pack.o \  
  133. mysys/mf_path.o \  
  134. mysys/mf_tempfile.o \  
  135. mysys/mf_unixpath.o \  
  136. mysys/mf_wcomp.o \  
  137. mysys/mulalloc.o \  
  138. mysys/my_access.o \  
  139. mysys/my_alloc.o \  
  140. mysys/my_chsize.o \  
  141. mysys/my_compress.o \  
  142. mysys/my_create.o \  
  143. mysys/my_delete.o \  
  144. mysys/my_div.o \  
  145. mysys/my_error.o \  
  146. mysys/my_file.o \  
  147. mysys/my_fopen.o \  
  148. mysys/my_fstream.o \  
  149. mysys/my_gethostbyname.o \  
  150. mysys/my_getopt.o \  
  151. mysys/my_getwd.o \  
  152. mysys/my_init.o \  
  153. mysys/my_lib.o \  
  154. mysys/my_malloc.o \  
  155. mysys/my_messnc.o \  
  156. mysys/my_net.o \  
  157. mysys/my_once.o \  
  158. mysys/my_open.o \  
  159. mysys/my_pread.o \  
  160. mysys/my_pthread.o \  
  161. mysys/my_read.o \  
  162. mysys/my_realloc.o \  
  163. mysys/my_rename.o \  
  164. mysys/my_seek.o \  
  165. mysys/my_static.o \  
  166. mysys/my_symlink.o \  
  167. mysys/my_symlink2.o \  
  168. mysys/my_thr_init.o \  
  169. mysys/my_wincond.o \  
  170. mysys/my_winthread.o \  
  171. mysys/my_write.o \  
  172. mysys/safemalloc.o \  
  173. mysys/sha1.o \  
  174. mysys/string.o \  
  175. mysys/thr_mutex.o \  
  176. mysys/typelib.o \  
  177. mysys/mf_qsort.o \  
  178. mysys/my_getsystime.o \  
  179. mysys/my_sync.o \  
  180. libmysql/errmsg.o \  
  181. libmysql/get_password.o \  
  182. libmysql/dll.o \  
  183. libmysql/libmysql.o \  
  184. libmysql/manager.o \  
  185. extra/yassl/taocrypt/src/aes.o \  
  186. extra/yassl/taocrypt/src/aestables.o \  
  187. extra/yassl/taocrypt/src/algebra.o \  
  188. extra/yassl/taocrypt/src/arc4.o \  
  189. extra/yassl/taocrypt/src/asn.o \  
  190. extra/yassl/taocrypt/src/coding.o \  
  191. extra/yassl/taocrypt/src/des.o \  
  192. extra/yassl/taocrypt/src/dh.o \  
  193. extra/yassl/taocrypt/src/dsa.o \  
  194. extra/yassl/taocrypt/src/file.o \  
  195. extra/yassl/taocrypt/src/hash.o \  
  196. extra/yassl/taocrypt/src/integer.o \  
  197. extra/yassl/taocrypt/src/md2.o \  
  198. extra/yassl/taocrypt/src/md4.o \  
  199. extra/yassl/taocrypt/src/md5.o \  
  200. extra/yassl/taocrypt/src/misc.o \  
  201. extra/yassl/taocrypt/src/random.o \  
  202. extra/yassl/taocrypt/src/ripemd.o \  
  203. extra/yassl/taocrypt/src/rsa.o \  
  204. extra/yassl/taocrypt/src/sha.o \  
  205. extra/yassl/src/buffer.o \  
  206. extra/yassl/src/cert_wrapper.o \  
  207. extra/yassl/src/crypto_wrapper.o \  
  208. extra/yassl/src/handshake.o \  
  209. extra/yassl/src/handshake.o \  
  210. extra/yassl/src/lock.o \  
  211. extra/yassl/src/log.o \  
  212. extra/yassl/src/socket_wrapper.o \  
  213. extra/yassl/src/ssl.o \  
  214. extra/yassl/src/timer.o \  
  215. extra/yassl/src/yassl_error.o \  
  216. extra/yassl/src/yassl_imp.o \  
  217. extra/yassl/src/yassl_int.o \  
  218.   
  219.   
  220.   
  221.   
  222. # Note2: if you want to comment this line "MYCFLAGS= -O2 -g",   
  223. #        please use "cleanbin" & "clean" and rebuild the project("Clean Project")  
  224. # 切换debug和release版时(即修改MYCFLAGS),最好用下面的make all重新编译一次  
  225. #all : cleanbin bin/zlib.dll lib/libz.a bin/example.exe clean  
  226.   
  227. all : libmysql.a test.exe  
  228.   
  229. libmysql.dll : $(OBJECTS)  
  230.     $(CC) -shared -o $@ $(OBJECTS) $(LIBS)  
  231.     cp -p bin/zlib.dll lib/libmysql.dll.a  
  232.       
  233. libmysql.a : $(OBJECTS)  
  234.     $(AR) $@ $(OBJECTS)  
  235.     #strip --strip-unneeded $@  
  236.   
  237. #-l次序需要注意  
  238. test.exe :   
  239.     gcc $(CFLAGS) -o $@ main.c -L. -lmysql -lws2_32 -lstdc++  
  240.   
  241. clean :   
  242.     rm -f $(OBJECTS)  
  243.     rm -f *.a *.dll *.exe  
  244.       
  245. cleanbin :  
  246.     rm -f bin/libmysql.dll lib/libmysql.a lib/libmysql.dll.a  
  247.       
  248. run : all  
  249.     bin/example.exe  

 

 

 

三、创建新文件include/mysql_version.h,如下:

 

 

C代码   收藏代码
  1. /* Copyright Abandoned 1996, 1999, 2001 MySQL AB 
  2.    This file is public domain and comes with NO WARRANTY of any kind */  
  3.   
  4. /* Version numbers for protocol & mysqld */  
  5.   
  6. #ifndef _mysql_version_h  
  7. #define _mysql_version_h  
  8. #ifdef _CUSTOMCONFIG_  
  9. #include <custom_conf.h>  
  10. #else  
  11. #define PROTOCOL_VERSION        10  
  12. #define MYSQL_SERVER_VERSION        "5.1.49"  
  13. #define MYSQL_BASE_VERSION      "mysqld-5.1"  
  14. #define MYSQL_SERVER_SUFFIX_DEF     ""  
  15. #define FRM_VER             6  
  16. #define MYSQL_VERSION_ID        50149  
  17. #define MYSQL_PORT          3306  
  18. #define MYSQL_PORT_DEFAULT      0  
  19. #define MYSQL_UNIX_ADDR         "/tmp/mysql.sock"  
  20. #define MYSQL_CONFIG_NAME       "my"  
  21. #define MYSQL_COMPILATION_COMMENT   "Source distribution"  
  22.   
  23. /* mysqld compile time options */  
  24. #endif /* _CUSTOMCONFIG_ */  
  25.   
  26. #ifndef LICENSE  
  27. #define LICENSE             GPL  
  28. #endif /* LICENSE */  
  29.   
  30. #endif /* _mysql_version_h */  

 

 

四、创建将要测试的客户端c源文件main.c(和上面一样),如下

 

 

 

C代码   收藏代码
  1. /* 
  2.  * main.c 
  3.  * 
  4.  *  Created on: 2010-8-2 
  5.  *      Author: Administrator 
  6.  */  
  7. #ifndef MAIN_H_  
  8. #define MAIN_H_  
  9.   
  10. #include <stdio.h>  
  11. #include <stdlib.h>  
  12. #include <string.h>  
  13. #include <windows.h>  
  14.   
  15. //#include <my_global.h>  
  16. #include <mysql.h>  
  17.   
  18. static char *opt_host_name = "localhost";  
  19. static char *opt_user_name = "root";  
  20. static char *opt_password = "123456";  
  21. static unsigned int opt_port_num = 3306;  
  22. static char *opt_socket_name = NULL;  
  23. static char *opt_db_name = "test";  
  24. static unsigned int opt_flags = 0;  
  25.   
  26. static MYSQL *conn;  
  27.   
  28. void print_error(MYSQL *conn, const char *title){  
  29.     fprintf(stderr,"%s:\nError %u (%s)\n",title,mysql_errno(conn),mysql_error(conn));  
  30. }  
  31.   
  32. void process_result_set(MYSQL *conn,MYSQL_RES *res_set){  
  33.     far MYSQL_ROW row;  
  34.     unsigned int i;  
  35.   
  36.     while ((row = mysql_fetch_row(res_set)) != NULL){  
  37.         for(i=0;i<mysql_num_fields(res_set);i++){  
  38.             if (i > 0)  
  39.                 fputc('\t',stdout);  
  40.             row[i] = row[i];  
  41.             printf("%1s",row[i] != NULL ? row[i] : "NULL");  
  42.         }  
  43.         fputc('\n',stdout);  
  44.     }  
  45.   
  46.     if(mysql_errno(conn) != 0)  
  47.         print_error(conn,"mysql_fetch_row() failed");  
  48.     else  
  49.         printf("%lu rows returned \n",  
  50.             (unsigned long)mysql_num_rows(res_set));  
  51. }  
  52.   
  53. int main(int argc, _TCHAR* argv[])  
  54. {  
  55.     if( (conn = mysql_init(NULL))== NULL){  
  56.         fprintf(stderr,"mysql 初始化失败(可能是内存溢出)!\n");  
  57.         exit(1);  
  58.     }  
  59.   
  60.     if(mysql_real_connect(conn,opt_host_name,opt_user_name,opt_password,  
  61.         opt_db_name,opt_port_num,opt_socket_name,opt_flags) == NULL){  
  62.   
  63.             fprintf(stderr,"mysql_real_connect 失败:\nError %u (%s)\n",  
  64.                 mysql_errno(conn),mysql_error(conn));  
  65.   
  66.             mysql_close(conn);  
  67.             exit(1);  
  68.     }  
  69.   
  70.     if(mysql_query(conn,"insert into t (num, date) values (0, now());")){  
  71.         print_error(conn,"执行插入失败");  
  72.     }else{  
  73.         printf("插入成功,受影响行数:%lu\n",(unsigned long)mysql_affected_rows(conn));  
  74.     }  
  75.   
  76.     if(mysql_query(conn,"select * from t")){  
  77.         print_error(conn,"mysql_query() error");  
  78.     }else{  
  79.         MYSQL_RES *res_set;  
  80.         res_set = mysql_store_result(conn);    /**//*生成结果集*/  
  81.         if(res_set == NULL)  
  82.             print_error(conn,"mysql_store_result failed");  
  83.         else {  
  84.             process_result_set(conn,res_set);  
  85.             mysql_free_result(res_set);  
  86.         }  
  87.     }  
  88.   
  89.     /**//*断开*/  
  90.     mysql_close(conn);  
  91.   
  92.     getchar();  
  93.     return 0;  
  94. }  
  95. #endif  

 

 

 

五、修改mysys/my_init.c,加上MINGW32的判断和#include <stdint.h>,
否则,uintptr_t无定义错误(怀疑是因为这个类型在mingw的定义的头文件和VC2008的不一样)。

 

 

C代码   收藏代码
  1. #if defined(__MINGW32__)  
  2. #include <stdint.h>  
  3. #endif  
  4.   
  5. void my_parameter_handler(const wchar_t * expression, const wchar_t * function,  
  6.                           const wchar_t * file, unsigned int line,  
  7.                           uintptr_t pReserved)  
  8. {  
  9.   DBUG_PRINT("my",("Expression: %s  function: %s  file: %s, line: %d",  
  10.            expression, function, file, line));  
  11. }  

 

 


六、修改include/config-win.h,在inline前加上static,
使每个.o的inline函数符号不重复,避免符号冲突。
否则在链接时候出现大量multiple definition错误。

 

 

C代码   收藏代码
  1. static inline double ulonglong2double(ulonglong value)  
  2. static inline ulonglong double2ulonglong(double d)  

 

 

七、修改extra/yassl/taocrypt/include/runtime.hpp,加上MINGW32判断,
否则出现multiple definition of `__cxa_pure_virtual'

 

C代码   收藏代码
  1. #if defined(__GNUC__) && !(defined(__ICC) || defined(__INTEL_COMPILER) || defined(__MINGW32__))  

 

 

八、修改mysys/my_open.c,加上#undef __WIN__,屏蔽sopen的windows移植。
否则会出现undefined reference to `_dosmaperr'。

 

 

C代码   收藏代码
  1. #include "mysys_priv.h"  
  2. #include "mysys_err.h"  
  3. #include <my_dir.h>  
  4. #include <errno.h>  
  5. #undef __WIN__  
  6. #if defined(__WIN__)  
  7. #include <share.h>  
  8. #endif  

 


九、Makefile的问题


a)
Makefile编译参数加上-DNO_OLDNAMES -DHAVE_RINT否则会有一堆函数重复定义

 

b)
加入yaSSL时,出现大量类似信息:

undefined reference to `operator delete(void*)'

 
需要在编译参数中加入-lstdc++

 

c)
出现类似信息

undefined reference to `socket @12 '

 
需要在编译参数中加入-lws2_32

 

d)
注意顺序要在-lmysql后

Makefile代码   收藏代码
  1. test.exe :   
  2.  gcc $(CFLAGS) -o $@ main.c -L. -lmysql -lws2_32 -lstdc++  

 

否则会导致-l失效

 

十、执行make clean && make最后生成exe为7.75 MB(-g编译),运行正常(没有出现崩溃情况)

 

 

------------------------------------------------------------------------

 

 

 

 

2010-11-06补充:

mingw相关信息的链接

 

minGW+mSYS+Apache+PHP+Postgresql 
https://www.prodigyone.com/in/doc/docs.php?view=1&nid=224

 

MinGW安装方法
http://tech.idv2.com/2006/03/27/mingw-install-note/

 

monotone/ Building/ Windows/ MinGW  
http://wiki.monotone.ca/Building/Windows/MinGW/

 

Command line build using MinGW and autotools
http://wiki.apache.org/logging-log4cxx/MSWindowsBuildInstructions

在mingw下编译mplayer(转载)
http://hi.baidu.com/honanlinux/blog/item/e24f954a01bccff682025ca7.html

 

 

------------------------------------------------------------------------

 

profile.d配置方案:

 

保存在/etc/profile.d/local.sh(由/etc/profile调用)

把/local/bin加入PATH,把/local/include、/local/lib加入编译器的头文件和库文件搜索路径。

 

 

Sh代码   收藏代码
  1. #! /usr/bin/sh  
  2.   
  3. export CPATH=/usr/local/include:/usr/include:$CPATH  
  4. export C_INCLUDE_PATH=/usr/local/include:/usr/include:$C_INCLUDE_PATH  
  5. export CPLUS_INCLUDE_PATH=/usr/local/include:/usr/include:$CPLUS_INCLUDE_PATH  
  6. export OBJC_INCLUDE_PATH=/usr/local/include:/usr/include:$OBJC_INCLUDE_PATH  
  7. export LD_LIBRARY_PATH=/usr/local/lib:/usr/lib:$LD_LIBRARY_PATH  
  8. export LIBRARY_PATH=/usr/local/lib:/usr/lib:$LIBRARY_PATH  
  9. export LIBPATH=/usr/local/lib:/usr/lib:$LIBPATH  

 

------------------

20111022补充

 

对于在Linux上自己编译安装的程序,由于在执行./configure --prefix=<绝对路径>指定的路径

一般在home目录中,所以编译存在依赖关系的程序时,通常要用

$ PKG_CONFIG_PATH=<绝对路径>/lib/pkgconfig/:$PKG_CONFIG_PATH ./configure --prefix=<绝对路径>

$ export PKG_CONFIG_PATH=<绝对路径>/lib/pkgconfig/:$PKG_CONFIG_PATH

$ ./configure --prefix=<绝对路径>

使configure能准确找到库安装的位置

使用

$ LD_LIBRARY_PATH=<绝对路径>/lib:$LD_LIBRARY_PATH ./xxx

$ export LD_LIBRARY_PATH=<绝对路径>/lib:$LD_LIBRARY_PATH

$ ./xxx

指定./xxx程序需要用到的.so文件所在的路径。

(如果使用sudo,则环境变量LD_LIBRARY_PATH的赋值必须跟在sudo后面)

 

-------------------------------

2012-01-06

 

更换ubuntu的软件源

ubuntu的apt-get有时候下载会很慢,需要更换软件源指向国内的镜像以加速下载。

 

Administration->software sources

->Download from:选择最近的镜像

 

---------------------------------------------

apt-get使用问题:

 

 

$ sudo apt-cache search boost

搜索软件包

 

$ sudo apt-get install libboost1.40-all-dev 

安装boost(一定要用all-dev,不要用dev,否则不全)

 

---------------------------------------------

 

 

(后续,待修改)

加载中
返回顶部
顶部