libuv之mingw64环境搭建及编译Libuv

1. MinGW与MinGW64有什么区别联系?
MinGW一盘用于x86开发(32bits)

MinGW64可用于x86_64(既可64bits也可32bits),还支持32位,64位交叉编译。 ---- 现在用这个的比较多


2.下载MinGW64
https://sourceforge.net/projects/mingw-w64
下载下来的也是一个安装器,所以都需要网络,如果能翻墙就翻墙,速度会快点,这些都在老外的服务器上。
下载后会自动安装的,安装完直接点finish就结束。、

3.安装MinGW64
参数选择:
1)dwarf、sjlj 的异常模型选择,推荐使用dwarf即所谓dw2,这个模型便于调试。不过出来的东西较sjlj的东西体量稍大些。
2)如果没有跨平台编译需求,就选win32。如果有的话选posix。
3)i686 与 行x86_64这个好理解,既然下载的是MinGW-w64,当然就要选x86_64,否则下载Mingw的纯32就行了。


4.配置
基本与上一篇介绍的MinGW配置类似,在path里加上D:\Program Files\mingw-w64\bin; (默认安装时提示是安装在C:\Program Files\mingw-w64,网上说安装的路径简单比较好,
比如D:\mingw-64,但安装器提示就安装在program files下,所以我这里只改为D盘下program files,后来实际使用时并没有问题)
在win的cmd下输入gcc -v,如果看到版本就表示成功。


如果想使用eclipse,在path里配置好后,打开eclipse一样可以选mingw-64编译。


5.我这里下载的Libuv是1.10.2版本,下载后我们在根目录下可以发现有一个现成的makefile.mingw,所以直接Make就可以了

Administrator@PC-20170308HYGG MINGW64 ~/libuv-v1.10.21
$ make -f Makefile.mingw
cc -Wall -Wextra -Wno-unused-parameter -Iinclude -Isrc -Isrc/win -DWIN32_LEAN_AND_MEAN -D_WIN32_WINNT=0x0600 -c -o src/fs-poll.o src/fs-poll.c
cc -Wall -Wextra -Wno-unused-parameter -Iinclude -Isrc -Isrc/win -DWIN32_LEAN_AND_MEAN -D_WIN32_WINNT=0x0600 -c -o src/inet.o src/inet.c
cc -Wall -Wextra -Wno-unused-parameter -Iinclude -Isrc -Isrc/win -DWIN32_LEAN_AND_MEAN -D_WIN32_WINNT=0x0600 -c -o src/threadpool.o src/threadpool.c
cc -Wall -Wextra -Wno-unused-parameter -Iinclude -Isrc -Isrc/win -DWIN32_LEAN_AND_MEAN -D_WIN32_WINNT=0x0600 -c -o src/uv-common.o src/uv-common.c

.......

编译好后在根目录下可以发现一个libuv.a的库。

注》编译前,可以先修改一下,这个宏是windows下定义的,应该libuv下没有及时更新到,所以需要手动修改,在src\win\error.c的74行宏定义有错,mingw-64编译时有提示怎么修改,具体修改如下即可编译:
  switch (sys_errno) {
    case ERROR_NOACCESS:                    return UV_EACCES;
    case WSAEACCES:                         return UV_EACCES;
    //case ERROR_ELEVATION_REQUIRED:          return UV_EACCES; // Jack marked
    case 0x800702E4:          return UV_EACCES; // Jack added
    case ERROR_ADDRESS_ALREADY_ASSOCIATED:  return UV_EADDRINUSE;
    case WSAEADDRINUSE:                     return UV_EADDRINUSE;


使用libuv.a时需要加上相关的windows库,比如:

$ gcc test.c -o test /home/Administrator/libuv-v1.10.2/libuv.a -I /home/Administrator/libuv-v1.10.2/jack/include/ -ladvapi32 -liphlpapi -lpsapi -luser32 -luserenv -lws2_32

阅读更多

更多精彩内容