来客网站建设互联网公司名字大全参考

当前位置: 首页 > news >正文

来客网站建设,互联网公司名字大全参考,做网站自己买域名,薄荷网wordpress文章目录 一、准备Cygwin环境二、下载Redis源码三、编译redis-7.2.01. 执行make命令2. 重新执行make命令3. 再次执行make命令4. 将编译后的可执行文件及依赖放到同一个文件夹5. 测试编译生成的可执行程序 四、换其他redis版本重新编译1. 编译redis-7.0.122. 编译redis-6.2.133.… 文章目录 一、准备Cygwin环境二、下载Redis源码三、编译redis-7.2.01. 执行make命令2. 重新执行make命令3. 再次执行make命令4. 将编译后的可执行文件及依赖放到同一个文件夹5. 测试编译生成的可执行程序 四、换其他redis版本重新编译1. 编译redis-7.0.122. 编译redis-6.2.133. 编译redis-7.2.rc3、redis-7.2-rc2 五、总结 如果你不想那么麻烦自己编译redis你可参考我的另一篇文章 Windows 下 Redis 安装与配置 教程 接下来演示如何使用Cygwin工具编译redis源码生成适用于Windows的Redis其中包含编译过程中遇到的问题及解决方案 先说结论 redis-7.2.0编译后生成的redis-server不可用 redis-7.0.12、redis-6.2.13 编译后生成的redis-cli、redis-server 经测试均可用 一、准备Cygwin环境 Cygwin安装这里就不介绍了请参考 Cygwin 介绍与安装 Cygwin 配置C/C编译环境以及如何编译项目 我本地Cygwin安装的软件包如下其中 make、gcc-core、gcc-g、pkg-config、tcl 建议这几个都装上。 找到Cygwin安装目录下的usr\include\dlfcn.h文件修改如下代码将#if __GNU_VISIBLE、#endif 这两行注释掉。使用// 或 /* 被注释代码/ 方式进行注释 //#if __GNU_VISIBLE typedef struct Dl_info Dl_info;struct Dl_info {char dli_fname[PATH_MAX]; / Filename of defining object */void dli_fbase; / Load address of that object */const char dli_sname; / Name of nearest lower symbol */void dli_saddr; / Exact value of nearest symbol */ };extern int dladdr (const void *addr, Dl_info *info); //#endif二、下载Redis源码 redis源码下载地址redis/redis/releases 如果访问Github较慢提供如下解决方案 作为程序员不得不知道的几款Github加速神器 三、编译redis-7.2.0 先编译一个目前的最新版本试试水

  1. 执行make命令 在redis-7.2.0项目根目录执行make命令 比如我redis解压后的地址 d:/test/redis-7.2.0 AdministratorGC ~ \( cd d:/test/redis-7.2.0AdministratorGC /cygdrive/d/test/redis-7.2.0 \) make当然一般没那么顺利看报错 MAKE hiredis cd hiredis make static make[3]: Entering directory /cygdrive/d/test/redis-7.2.0/deps/hiredis cc -stdc99 -c -O3 -fPIC -Wall -Wextra -Werror -Wstrict-prototypes -Wwrite-strings -Wno-missing-field-initializers -g -ggdb -pedantic alloc.c cc -stdc99 -c -O3 -fPIC -Wall -Wextra -Werror -Wstrict-prototypes -Wwrite-strings -Wno-missing-field-initializers -g -ggdb -pedantic net.c cc -stdc99 -c -O3 -fPIC -Wall -Wextra -Werror -Wstrict-prototypes -Wwrite-strings -Wno-missing-field-initializers -g -ggdb -pedantic hiredis.c cc -stdc99 -c -O3 -fPIC -Wall -Wextra -Werror -Wstrict-prototypes -Wwrite-strings -Wno-missing-field-initializers -g -ggdb -pedantic sds.c In file included from sds.c:37: sds.c: In function ‘hi_sdscatrepr’: sds.c:889:25: error: array subscript has type ‘char’ [-Werrorchar-subscripts]889 | if (isprint(p))| ^~ cc1: all warnings being treated as errors make[3]: ** [Makefile:270: sds.o] Error 1 make[3]: Leaving directory /cygdrive/d/test/redis-7.2.0/deps/hiredis make[2]: *** [Makefile:55: hiredis] Error 2 make[2]: Leaving directory /cygdrive/d/test/redis-7.2.0/deps make[1]: [Makefile:384: persist-settings] Error 2 (ignored) 解决方案 方案1修改hiredis的Makefile WARNINGS-Wall -Wextra -Werror -Wstrict-prototypes -Wwrite-strings -Wno-missing-field-initializers找到这行代码42行删掉-Werror 方案2修改sds.c文件 default:if (isprint((int)*p))s hi_sdscatprintf(s,%c,*p);elses hi_sdscatprintf(s,\x%02x,(unsigned char)*p);break;}找到889行报错的那行sds.c:889:25: error: array subscript has type ‘char’ [-Werrorchar-subscripts] 将if (isprint(*p))改为if (isprint((int)*p))做一个强制转换。
  2. 重新执行make命令 make clean make重新编译之前先执行一下make clean 还是没那么顺利看报错 LINK redis-server /usr/lib/gcc/x86_64-pc-cygwin/11/../../../../x86_64-pc-cygwin/bin/ld: cannot find ../deps/hiredis/libhiredis.a: No such file or directory /usr/lib/gcc/x86_64-pc-cygwin/11/../../../../x86_64-pc-cygwin/bin/ld: cannot find ../deps/lua/src/liblua.a: No such file or directory /usr/lib/gcc/x86_64-pc-cygwin/11/../../../../x86_64-pc-cygwin/bin/ld: cannot find ../deps/hdr_histogram/libhdrhistogram.a: No such file or directory /usr/lib/gcc/x86_64-pc-cygwin/11/../../../../x86_64-pc-cygwin/bin/ld: cannot find ../deps/fpconv/libfpconv.a: No such file or directory collect2: error: ld returned 1 exit status make[1]: *** [Makefile:403: redis-server] Error 1 make[1]: Leaving directory /cygdrive/d/test/redis-7.2.0/src make: *** [Makefile:6: all] Error 2解决方案 cd deps make hiredis lua hdr_histogram fpconv jemalloc linenoise进入到deps目录对deps下报错的子项目进行单独编译。 如果没有再报错则继续往下我这里没有再次报错了忽略Warning信息
  3. 再次执行make命令 cd .. make回到redis项目根目录再次执行make命令 AdministratorGC /cygdrive/d/test/redis-7.2.0/deps $ cd .. make cd src make all make[1]: Entering directory /cygdrive/d/test/redis-7.2.0/srcLINK redis-cli lto-wrapper: warning: using serial compilation of 3 LTRANS jobsCC redis-benchmark.oLINK redis-benchmarkINSTALL redis-check-rdbINSTALL redis-check-aofHint: Its a good idea to run make test ;)make[1]: Leaving directory /cygdrive/d/test/redis-7.2.0/src然后成功了很开心。
  4. 将编译后的可执行文件及依赖放到同一个文件夹 AdministratorGC /cygdrive/d/test/redis-7.2.0 \( mkdir binAdministratorGC /cygdrive/d/test/redis-7.2.0 \) mv src/*.exe binAdministratorGC /cygdrive/d/test/redis-7.2.0 \( cp *.conf binAdministratorGC /cygdrive/d/test/redis-7.2.0 \) cp /usr/bin/cygwin1.dll bin将src目录下编译生成的*.exe可执行程序源码根目录下的redis.conf、sentinel.conf等以及依赖的Cygwin安装目录下的bin目录下的cygwin1.dll都放到同一个文件夹下。 如下所示
  5. 测试编译生成的可执行程序 打开一个cmd窗口切换到上述发布redis的目录下然后执行redis-server命令 兄弟们我很难过呀报错啦~ redis-server没有启动成功生成一个redis-server.exe.stackdump文件。 我不懂这个呀有懂得兄弟可以给我科普下。 再测试下redis-cli 看起来 redis-cli 是可以正常使用的。 四、换其他redis版本重新编译
  6. 编译redis-7.0.12 鉴于我不甘心我换了个redis-7.0.12版本重新编译下看看。 编译步骤我就不重复了直接说结果。 项目下载下来后没有修改redis项目的任何代码直接在根目录下执行make命令一次成功 启动 redis-server 使用redis-cli连接redis
    讲真你能说官方发布的redis-7.2.0有问题吗不能够吧毕竟那么大个项目那么多人在维护和测试。只能说这个版本可能在Windows环境下编译有问题。 注意我说的是可能也许其他人能成功呢要勇于尝试。
  7. 编译redis-6.2.13 然后我又尝试了 redis-6.2.13 版本也是一次成功并且redis-server、redis-cli 都可正常执行。
  8. 编译redis-7.2.rc3、redis-7.2-rc2 我还尝试了 redis-7.2-rc3、redis-7.2-rc2 也能编译成功但同redis-7.2.0 一样redis-server启动时报错。 五、总结 如上尝试了多个redis版本编译。结果总结如下 redis-7.2各版本可成功编译但编译生成的可执行文件中redis-server.exe 执行时报错不可用redis-7.0.12版本可成功编译且redis-cli、redis-server均可正常使用redis-6.2.13版本可成功编译且redis-cli、redis-server均可正常使用