昨天要编译一个64位版本的Redis服务器。运行在Solaris10上面。在编译的时候碰到一些问题。如今把解决的过程记录下来。redis
我用的redis的版本是2.2.11,编译器是gcc4.4.3服务器
第一步修改deps/hiredis/MakeFile架构
修改内容以下:socket
64bit:
@echo ""
@echo "WARNING: if it fails under Linux you probably need to install libc6-dev-i386"
@echo ""
$(MAKE) ARCH="-m64"orm
第二部修改src/MakeFile编译器
ifeq ($(uname_S),SunOS)
CFLAGS?= -std=c99 -pedantic $(OPTIMIZATION) -Wall -W -D__EXTENSIONS__ -D_XPG6 $(ARCH) $(PROF)
CCLINK?= -ldl -lnsl -lsocket -lm -lpthread
DEBUG?= -g -ggdb
64bit:
@echo ""
@echo "WARNING: if it fails under Linux you probably need to install libc6-dev-i386"
@echo ""
$(MAKE) ARCH="-m64"it
64bitgprof:
$(MAKE) PROF="-pg" ARCH="-arch i386"io
好了,MakeFile文件修改完成。试着运行一下。编译
~/redis/redis/redis-2.2.11$ make 64bitfunction
发现编译错误:
sha1.c:78:2: error: #error "Undefined or invalid BYTE_ORDER"
sha1.c:91:2: error: #error "Endianness not defined!"
sha1.c: In function 'SHA1Transform':
缘由是这台机器的架构师SunOS x86,它的字节序列是LITTLE_ENDIAN,打开sha1.c文件,文件前面70行都在定义BYTE_ORDER,这里咱们简单的加一行就能够了。
#define BYTE_ORDER LITTLE_ENDIAN
70
71 #if !defined(BYTE_ORDER) || \
72 (BYTE_ORDER != BIG_ENDIAN && BYTE_ORDER != LITTLE_ENDIAN && \
73 BYTE_ORDER != PDP_ENDIAN)
74 /* you must determine what the correct bit order is for
75 * your compiler - the next line is an intentional error
76 * which will force your compiles to bomb until you fix
77 * the above macros.
78 */
79 #error "Undefined or invalid BYTE_ORDER"
80 #endif
而后再从新运行make 64bit成功。