AIX下编译Redis
基本环境
AIX:7.1
编译器xlc:12.1
Resia源码:2.8.13
直接编译肯定无法通过,xlc与gcc的编译选项不能完全通用,需要修改Makefile和一些源代码文件。
依赖库文件修改
hiredis
在src/Makefile中增加宏定义,主要是为了使用socket(?)。
-D__HIREDIS_FMACRO_H -D_BSD_SOURCE -DAF_LOCAL=AF_UNIX
修改DEBUG选项,去掉-ggdb
,这项会被xlc解析出-b
选项,可能会出现干扰。修改链接选项,将-shared
改为-qmkshrobj
。同时还需要修改-Wl,-soname,$(DYLIB_MINOR_NAME)
,该项生成一个链接文件,但我没找到xlc对应的选项,只好直接删掉,在make项目中手动加上ln命令。
修改.c.o项目的编译命令,将-std=c99
改为-qlanglvl=stdc99
,删掉-pedantic
(没找到对应选项)。
lua
lua库的Makefile和src/Makefile文件中有针对aix的编译选项,需将PLAT设置为aix。下面修改只针对src/Makefile文件。
设置MYCFLAGS变量为-qlanglvl=stdc99
,在aix项目中的CFLAGS中加入-qlanglvl=stdc99
源文件修改
同上,需要修改Makefile文件。
将-std=c99
修改为-qlanglvl=stdc99
,删掉DEBUG中的-ggdb
。修改链接命令,将FINAL_LDFLAGS
从-rdynamic
修改为-bdynamic
,将FINAL_LIBS
修改为-lpthread
。
redis的Makefile中只有简单的install命令,但我没有系统权限,所以只好将所有的install命令都改成cp。
编译
使用gmake编译,gmake install安装,可以正常使用。不过系统中没有tcl,无法完成测试。
参考资料
附注
尝试在AIX下编译软件是个既无趣又浪费时间的事情,以后还是少费时间在这上面,多做些有意义的事情。