编译reids的sds文件

问题

在学习redis源码的时候,只能傻傻的看代码,运行结果全靠猜,实在是忍受不了,就想着我能否像写php一样,不懂的直接运行起来

初试

想当然的,sds.c的文件嘛,直接使用如下命令
gcc sds.c -o sds.o
结果也很想当然的报错

Alt text

本能的去指定头文件,依旧报错
gcc -I sds.h zmalloc.h sds.c -o sds.o

解决办法

google后得知,是动态链接库没指定好
首先删除’#ifdef SDS_TEST_MAIN’以及’#endif’,虽然我不太能看懂,猜测就是只有在’SDS_TEST_MAIN’这个存在的时候,才去定义main函数,由于我不知道SDS_TEST_MAIN他是在哪个文件中定义的,所以干脆直接删除,反正我也只是为了看运行结果
编译动态链接库
gcc zmalloc.c -fPIC -shared -o libzmalloc.so
命名的格式需要注意一下,lib+文件名+'.so'
指定动态链接库,编译sds.c
gcc sds.c -L. -l zmalloc -o sds.o
-L:添加库文件的搜索路径
-l:指定需要链接的库,该名字就是lib***.so中的名称
运行
./sds.o
非常开心,感觉在看redis源码的路上又走了一大步,准备看源码好久了,为了看源码还学了c,之前断断续续看了一段时间,昨天把sds.c看懂了今天运行起来了,不错!

Alt text

坚持原创技术分享,您的支持将鼓励我继续创作!