acl-dev / acl

C/C++ server and network library, including coroutine,redis client,http/https/websocket,mqtt, mysql/postgresql/sqlite client with C/C++ for Linux, Android, iOS, MacOS, Windows, etc..
https://acl-dev.cn
GNU Lesser General Public License v3.0
2.83k stars 937 forks source link

fiber在windows上编译报的一些错 #341

Open heheda123123 opened 2 months ago

heheda123123 commented 2 months ago

看fiber库的描述是支持windows的 image 放开xmake.lua里面的限制 image 编译过程会遇到下面的一些错误 (下面有些错误是c++特有的,有些是msvc的强制安全要求,大佬比我懂,看情况修改哈。要么就把使用不安全函数的宏直接加到构建脚本里,要么用宏控制下,windows上就用那些安全函数) 处理了下面的错误之后编译即可通过(我本地都是注释或者赋值为0)

1 用了线程不安全的函数 编译会报错如下 image

lib_fiber\c\src\common\gettimeofday.c(144): error C2220: 以下警告被视为错误
lib_fiber\c\src\common\gettimeofday.c(144): warning C4996: '__timezone': This function or variable may be unsafe. Consider using _get_timezone instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
lib_fiber\c\src\common\gettimeofday.c(145): warning C4996: '__daylight': This function or variable may be unsafe. Consider using _get_daylight instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

应该是没有保证线程安全,需要换成后面的函数

2 dup可能被废弃了,用2022编译通不过 把上面两行注释了,继续编译,会出现下面的错误 image 可能是废弃了,得换成_dup? image

3 看这里的报错,貌似是delete关键字重名了? image

4 这里只有一个右大括号,是不是写漏了 image

5 这个文件,我用utf-8和gbk打开,注释都会乱码,字符编码应该是已经错乱了 image

6 如图,貌似是因为c++不支持默认int image

7 这里类型得明确指定成char* image

8 如下的文件同样存在被废弃的函数 image

9 如下的报错都要求明确void*转换的类型 image

10 如下报错显示要用msvc提供的安全函数 lib_fiber\c\src\dns\rfc1035.c image

11 貌似是没有定义UNICODE宏,用了WSASocketA函数 不过这里也没字符串参数,分不分A或者W好像也没啥关系 image

12 这里第七个参数,是int指针,但是需要一个LPDWORD,在64位上LPDWORD是unsigned long指针 image

13 不安全的函数 image

14 一些不安全的函数 image

15 不安全函数 image

16 一些不安全函数 image

17 同样提示要明确转换void* image

18 不安全函数 image

19 不安全函数 image

20 void*类型转换的问题 image

21 条件编译的用法好像有问题,不能用&&,得用两个嵌套 image

22 SOCKET句柄转int可能出问题 前面把dup改_dup的位置,话说这种SOCKET句柄传给dup的用法可以嘛,不确定? image

23 不安全函数,可能溢出 image

24 void*类型转换的问题 image

25 void*类型转换的问题 image