每次升级vs总会遇到一些问题,果然这次M$也没让我们失望。在vs2010的errno.h中添加了POISIX如下
/* POSIX SUPPLEMENT */ #define EADDRINUSE 100 #define EADDRNOTAVAIL 101 #define EAFNOSUPPORT 102 #define EALREADY 103 #define EBADMSG 104 #define ECANCELED 105 #define ECONNABORTED 106 #define ECONNREFUSED 107 #define ECONNRESET 108 #define EDESTADDRREQ 109 #define EHOSTUNREACH 110 #define EIDRM 111 #define EINPROGRESS 112 #define EISCONN 113 #define ELOOP 114 #define EMSGSIZE 115 #define ENETDOWN 116 #define ENETRESET 117 #define ENETUNREACH 118 #define ENOBUFS 119 #define ENODATA 120 #define ENOLINK 121 #define ENOMSG 122 #define ENOPROTOOPT 123 #define ENOSR 124 #define ENOSTR 125 #define ENOTCONN 126 #define ENOTRECOVERABLE 127 #define ENOTSOCK 128 #define ENOTSUP 129 #define EOPNOTSUPP 130 #define EOTHER 131 #define EOVERFLOW 132 #define EOWNERDEAD 133 #define EPROTO 134 #define EPROTONOSUPPORT 135 #define EPROTOTYPE 136 #define ETIME 137 #define ETIMEDOUT 138 #define ETXTBSY 139 #define EWOULDBLOCK 140 |
然而这些定于却对不少开源的代码编译造成了麻烦,特别是使用了WinSock2的代码。开源代码为了保持代码的兼容性一般吧errno定义到以WSA开头的WinSock2的errno定义上,而以WSA开头的errno定义和errno.h里面的errno定义完全不同。从而造成socket的程序获取到的错误号与于代码中用于判断的错误号完全不同。所以在大部分的源码都未提供vs2010支持的情况下最快的解决方法就是把errno.h里面新加入的错误号定义给注释掉。目前测试了curl 7.20.1 以及openssl 1.0.0均无问题。
更新注释掉以上部分代码可能会导致部分c++程序编译出错,请自行备份选择