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

河南建筑业城乡建设网站查询定制网站+域名+企业邮箱

河南建筑业城乡建设网站查询,定制网站+域名+企业邮箱,天津工程招标信息网官网,网站备案需要什么东西文章目录 一、准备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.0
      • 1. 执行make命令
      • 2. 重新执行make命令
      • 3. 再次执行make命令
      • 4. 将编译后的可执行文件及依赖放到同一个文件夹
      • 5. 测试编译生成的可执行程序
    • 四、换其他redis版本重新编译
      • 1. 编译redis-7.0.12
      • 2. 编译redis-6.2.13
      • 3. 编译redis-7.2.rc3、redis-7.2-rc2
    • 五、总结

如果你不想那么麻烦自己编译redis,你可参考我的另一篇文章:
Windows 下 Redis 安装与配置 教程

接下来演示如何使用Cygwin工具,编译redis源码,生成适用于Windows的Redis(其中包含编译过程中遇到的问题及解决方案)

先说结论:
redis-7.2.0编译后生成的redis-server不可用
redis-7.0.12redis-6.2.13 编译后生成的redis-cliredis-server 经测试均可用

一、准备Cygwin环境

Cygwin安装这里就不介绍了,请参考:
Cygwin 介绍与安装
Cygwin 配置C/C++编译环境以及如何编译项目

我本地Cygwin安装的软件包如下,其中 makegcc-coregcc-g++pkg-configtcl 建议这几个都装上。

Cygwin 已安装软件包

找到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
redis源码下载

如果访问Github较慢,提供如下解决方案:
作为程序员不得不知道的几款Github加速神器

三、编译redis-7.2.0

先编译一个目前的最新版本,试试水

1. 执行make命令

redis-7.2.0项目根目录,执行make命令
比如我redis解压后的地址: d:/test/redis-7.2.0

Administrator@GC ~
$ cd d:/test/redis-7.2.0Administrator@GC /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 -std=c99 -c -O3 -fPIC   -Wall -Wextra -Werror -Wstrict-prototypes -Wwrite-strings -Wno-missing-field-initializers -g -ggdb  -pedantic alloc.c
cc -std=c99 -c -O3 -fPIC   -Wall -Wextra -Werror -Wstrict-prototypes -Wwrite-strings -Wno-missing-field-initializers -g -ggdb  -pedantic net.c
cc -std=c99 -c -O3 -fPIC   -Wall -Wextra -Werror -Wstrict-prototypes -Wwrite-strings -Wno-missing-field-initializers -g -ggdb  -pedantic hiredis.c
cc -std=c99 -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’ [-Werror=char-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’ [-Werror=char-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命令

Administrator@GC /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/src'LINK redis-cli
lto-wrapper: warning: using serial compilation of 3 LTRANS jobsCC redis-benchmark.oLINK redis-benchmarkINSTALL redis-check-rdbINSTALL redis-check-aofHint: It's a good idea to run 'make test' ;)make[1]: Leaving directory '/cygdrive/d/test/redis-7.2.0/src'

然后成功了,很开心。

4. 将编译后的可执行文件及依赖放到同一个文件夹

Administrator@GC /cygdrive/d/test/redis-7.2.0
$ mkdir binAdministrator@GC /cygdrive/d/test/redis-7.2.0
$ mv src/*.exe binAdministrator@GC /cygdrive/d/test/redis-7.2.0
$ cp *.conf binAdministrator@GC /cygdrive/d/test/redis-7.2.0
$ cp /usr/bin/cygwin1.dll bin

将src目录下编译生成的*.exe可执行程序,源码根目录下的redis.confsentinel.conf等,以及依赖的Cygwin安装目录下的bin目录下的cygwin1.dll,都放到同一个文件夹下。

如下所示:
在这里插入图片描述

5. 测试编译生成的可执行程序

打开一个cmd窗口,切换到上述发布redis的目录下,然后执行redis-server命令
在这里插入图片描述
兄弟们,我很难过呀,报错啦~
报错啦
redis-server没有启动成功,生成一个redis-server.exe.stackdump文件。
我不懂这个呀,有懂得兄弟可以给我科普下。

再测试下redis-cli
redis-cli命令
看起来 redis-cli 是可以正常使用的。

四、换其他redis版本重新编译

1. 编译redis-7.0.12

鉴于我不甘心,我换了个redis-7.0.12版本,重新编译下看看。
编译步骤我就不重复了,直接说结果。

项目下载下来后,没有修改redis项目的任何代码,直接在根目录下执行make命令,一次成功!

启动 redis-server
redis-server
使用redis-cli连接redis
redis-cli

讲真,你能说官方发布的redis-7.2.0有问题吗?不能够吧,毕竟那么大个项目,那么多人在维护和测试。只能说这个版本可能在Windows环境下编译有问题。
(注意我说的是可能,也许其他人能成功呢,要勇于尝试。)

2. 编译redis-6.2.13

然后,我又尝试了 redis-6.2.13 版本,也是一次成功,并且redis-serverredis-cli 都可正常执行。

3. 编译redis-7.2.rc3、redis-7.2-rc2

我还尝试了 redis-7.2-rc3redis-7.2-rc2 ,也能编译成功,但同redis-7.2.0 一样,redis-server启动时报错。

五、总结

如上尝试了多个redis版本编译。结果总结如下:

  1. redis-7.2各版本,可成功编译,但编译生成的可执行文件中,redis-server.exe 执行时报错不可用;
  2. redis-7.0.12版本,可成功编译,且redis-cliredis-server均可正常使用;
  3. redis-6.2.13版本,可成功编译,且redis-cliredis-server均可正常使用;
http://www.hkea.cn/news/620251/

相关文章:

  • 网站推广优化教程游戏代理加盟平台
  • 网站提升权重全国疫情高峰感染进度
  • 营销型网站怎么做智能建站abc
  • 捷信做单官方网站网络服务主要包括什么
  • 网站建设的方案费用什么时候网络推广
  • 这么做3d展示网站公司百度官网优化
  • 工业设计软件上市公司搜索引擎优化的方法
  • 网站建设公司创意网站网络推广推广
  • 浙江三建建设集团有限公司网站关键词的作用
  • 网站建设官方网站教育培训机构加盟十大排名
  • 万网上传网站seo免费
  • 孝感做网站公司百度热议排名软件
  • 建设网站费用吗廊坊seo快速排名
  • 网站建设公司怎样拓展网站业务大连网站推广
  • 什么网站可以免费做找客户东莞seo建站推广费用
  • 合肥微信网站建设购物网站如何推广
  • 网站建设课程简介图片百度官网认证免费
  • 月夜影视在线观看免费完整版韩剧关键词排名优化报价
  • 做网站的工作时间兰州seo公司
  • css怎么嵌入到html直通车关键词优化口诀
  • 虚拟网站php专业型seo网站关键词排名提升
  • 找人合伙做网站平台b2b电商平台
  • 手机网站建设技术方案找网站设计公司
  • 杭州如何设计公司网站惠州seo网站推广
  • 成都网站建设门户大连企业网站建站模板
  • 游戏卡充值可以做网站吗百度竞价关键词出价技巧
  • 建设企业网站就等于开展网络营销网店推广实训报告
  • dede无法更新网站主页到百度联盟注册
  • wordpress支持爱奇艺企业网站seo托管怎么做
  • 永川做网站的武汉百度快速排名提升