• 怎样把redis编译为库,挪为己用?


      其实这是个伪命题。因为只要正常编译redis,那么在 /deps/hiredis/ 目录下就会生成动态库文件 libhiredis.so。

      为了便于学习redis源码,编写一些测试程序,并进行单步跟踪调试,可以新建一个子目录 /unit,在下面写自己的程序,如:

    /*
     * ex01.c
     *
     *  Created on: Jan 9, 2017
     *      Author: xxf
     */
    
    
    #include <stdio.h>
    
    #include "../src/sds.h"
    
    int main()
    {
        sds s = sdsnew("hello");
        size_t len = sdslen(s);
        printf("string: %s
    length: %d
    ", s, len);
        return 0;
    }

    然后编写一个Makefile:

    .PHONY: all
    
    all: ex01
    
    ex01: ex01.c
    	gcc -o ex01 -O1 -g -ggdb ex01.c -L ../deps/hiredis/ -lhiredis
    	

    再执行编译:

    $ make all

    即可得到我们的实验程序 ex01。运行结果如下:

    ~/workspace/redis-3.2.6/unit> ./ex01 
    string: hello
    length: 5

    方法比较笨,但暂时够用了。

    redis自带的单元测试是用tcl脚组织起来的,现在不会用,以后再说。

    调试的时候,库代码的断点要打在 /deps/hireds/ 目录下的文件中。

    下了断点以后,在断点处查看局部变量值的时候,有可能显示“optimized out”,可知被优化掉了。于是要调低优化级别。打开 /deps/hiredis/Makefile,找到 

      OPTIMIZATION?=-O3

    改为

      OPTIMIZATION?=-O1

    简单粗暴!

    在 /deps/hiredis/ 目录下重新编译库 libhiredis.so,然后回到 /unit/,重新编译 ex01,成功;运行 ex01,报错:

    ./ex01: error while loading shared libraries: libhiredis.so.0.11: cannot open shared object file
    : No such file or directory

    该问题解决步骤如下:

    1、在 /deps/hiredis/ 目录下 make install ,结果如下:

    mkdir -p /usr/local/include/hiredis /usr/local/lib
    cp -a hiredis.h async.h adapters /usr/local/include/hiredis
    cp -a libhiredis.so /usr/local/lib/libhiredis.so.0.11
    cd /usr/local/lib && ln -sf libhiredis.so.0.11 libhiredis.so.0
    cd /usr/local/lib && ln -sf libhiredis.so.0 libhiredis.so
    cp -a libhiredis.a /usr/local/lib

    2、修改 /etc/ld.so.conf 文件,增加 /usr/local/lib

    3、执行 /sbin/ldconfig

    再次运行 ex01,成功!

    单步调试,查看变量,正常!

  • 相关阅读:
    正则表达式
    c#文件流
    css
    Flash笔记 快捷键
    .Net截取指定长度的汉字,其余用...表示的方法
    远程修改最新消息管理系统(JQuery版)
    远程修改最新消息管理系统
    kubernetes 1.6 集群实践 (一)
    创建kafak集群
    创建zookeeper集群
  • 原文地址:https://www.cnblogs.com/xxfcz/p/6266570.html
Copyright © 2020-2023  润新知