Closed lailongwei closed 3 years ago
epoll.h/epoll.c:epoll_fd实现在32位下为将epoll_fd 强转为int返回,在64位下,会导致错误,代码中也有`assert(sizeof(struct epoll_fd ) <= sizeof(int))`判断,新的修改为增加一个映射数组,只在64位下启用,在epoll_create返回前,将epoll_fd放入到数组,只返回数组下标,即一个int类型。
64位的mingw环境为直接已经编译好的环境,编译时,发现缺少dlfcn动态库头文件及库文件,使用github中的三方封装完成,dlfcn-win32,直接在mingw64环境中./configure && make && make install即可。 修改后的Makefile会自动判别是编译64位的skynet还是32位的skynet,从而决定是否额外链接dl库及psapi库。
./configure && make && make install
64位的mingw环境中自带的libwinpthread库存在pthread_cond_signal死锁问题,网上无法找到比较新的代替品,使用自身库中的condition实现替代,在platform/skynet_condition.h platform/skynet_condition.c中实现,在32位下,不使用此实现,只在64位下使用这两个文件中的代码定义实现pthread_cond功能,新的cond类型为skynet_cond_t,对应的函数为skynet_cond_xxxx(),这个会修改skynet_start.c文件,已经在prepare.sh中自动完成注入及修改,不需要使用者关心有此修补包存在。
原有的ln -f xxx xxx的重复操作修改为直接定义一个数组,for each完成ln操作,增加对skynet_start.c代码的自动修改、注入代码(第三点有说明)。
ln -f xxx xxx
赞,不过没办法自动合并,麻烦处理一下.
我在6月3日的时候有个对makefile的修改,导致冲突了
epoll支持64位代码已经合并了
集中于以下三个修改 所有修改都已在自身的mingw32、mingw64环境中测试通过
epoll增加64位兼容:
epoll.h/epoll.c:epoll_fd实现在32位下为将epoll_fd 强转为int返回,在64位下,会导致错误,代码中也有`assert(sizeof(struct epoll_fd ) <= sizeof(int))`判断,新的修改为增加一个映射数组,只在64位下启用,在epoll_create返回前,将epoll_fd放入到数组,只返回数组下标,即一个int类型。
编译Makefile修改:
64位的mingw环境为直接已经编译好的环境,编译时,发现缺少dlfcn动态库头文件及库文件,使用github中的三方封装完成,dlfcn-win32,直接在mingw64环境中
./configure && make && make install
即可。 修改后的Makefile会自动判别是编译64位的skynet还是32位的skynet,从而决定是否额外链接dl库及psapi库。pthread_cond BUG修复:
64位的mingw环境中自带的libwinpthread库存在pthread_cond_signal死锁问题,网上无法找到比较新的代替品,使用自身库中的condition实现替代,在platform/skynet_condition.h platform/skynet_condition.c中实现,在32位下,不使用此实现,只在64位下使用这两个文件中的代码定义实现pthread_cond功能,新的cond类型为skynet_cond_t,对应的函数为skynet_cond_xxxx(),这个会修改skynet_start.c文件,已经在prepare.sh中自动完成注入及修改,不需要使用者关心有此修补包存在。
prepare.sh修改:
原有的
ln -f xxx xxx
的重复操作修改为直接定义一个数组,for each完成ln操作,增加对skynet_start.c代码的自动修改、注入代码(第三点有说明)。