64位Redis server编译

    昨天要编译一个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成功。

相关文章
相关标签/搜索