最近由于工作需要,又要做redis相关的工作。正好今天早上redis发布了最新的2.8.13版本,于是就下载了最新的版本并试着在Solaris上编译了一下,还是发现了一些问题。于是在此记录下来,说不定对其他人会有帮助。
(1)Solaris 9
我先选了一台Solaris 9,结果一开始编译就遇到“IPV6_V6ONLY”未定义错误。上网查了一下,发现Solaris不支持这个socket选项。我改了一点代码,绕过去这个问题,结果再编译遇到了没有stdint.h文件这个错误。于是果断决定放弃Solaris 9,转投Solaris 10。
(2)Solaris 10
Solaris 10上的编译过程还是比较顺利的,但是链接时出了两个问题:
a)nanosleep函数没有定义:Solaris上调用nanosleep,需要链接“rt library”,即在Makefile里加上“-lrt”。我把这个patch报给了redis(https://github.com/NanXiao/redis/commit/232d77938add77d95c91a714462389e62e2bf126),不过不确定redis会不会采纳。
b)isinf没有定义,需要在调用make命令时传入MISSING_ISINF宏定义,即“make “CFLAGS+=-DMISSING_ISINF” ”。
你好,我在solaris 10上面编译redis的时候也遇到你这两个问题,其中nanosleep的问题在makefile里面加上-lrt,编译通过,第二个问题我执行的gmake “CFLAGS+=-DMISSING_ISINF” 还是不能正确连接,请问需要怎么解决?
报错:
未定义 文件中的
符号 在文件中
isinf ../deps/lua/src/liblua.a(lua_cmsgpack.o)
ld: 致命的: symbol referencing errors. No output written to redis-server
这个问题我给Redis提过PR,请参考这两个PR:
https://github.com/antirez/redis/pull/2267 ,
https://github.com/antirez/redis/pull/2278 。
印象中好像merge到3.0的版本了,你可以check一下。