四、完善Makefile
既然liblua和libhiredis都有了,那就照葫芦画瓢,把redis-cli和redis-server的Makefile构造出来。
根据make流程的log,找到redis-server依赖的所有.o:
根据log,分别获得:所有需要编译的.c文件、gcc编译参数、头文件路径、依赖的库。
这里说一下依赖的库,这里看出需要的链接的库分别是libhiredis.a、liblua.a、libm.so、libdl.so、libpthread.so、librt.so。其中hiredis和lua是我们之前本工程编译的,dl、rt是Linux特有的。m就是math库,SylixOS是默认自带,pthread在SylixOS下是内核自带的,不需要额外依赖。所以正常情况下只需要链接hiredis和lua(这里为啥说是正常情况下,后面排错的时候会发现问题)。
完成redis-server.mk的编写:redis-server.mk
这里注意一下,一般我们知道,链接库时,-l后面跟库名称,-L后面跟库路径。然而libhiredis和liblua是自己工程编译出来的,路径咋填呢,我这里是用的是$(Output),这表示从编译的输出目录里找,如果工程是debug模式就从Debug目录下找,release模式就从Release目录下找。
将redis-server.mk加入Makefile,并放在libhiredis.mk和liblua.mk之下。尝试编译一下,发现报了些错误:
一个个看看,首先是没找着M_PI这个宏,追一下发现是在编译器的math.h里实现的,没事,我们在geohash_helper.c和server.h里定义一下:
另一个问题,发现是有个函数名称和内核的宏定义冲突了:
这个也很简单,我们把moduleLoad undef掉就行:
所有的修改都用#ifdef SYLIXOS包一下,方便以后排查,也不会影响原应用编译逻辑。
编译一下,发现编译通过了。先不着急测试,继续编redis-cli:redis-cli.mk
尝试编译一下,也过了。
现在我们已经有了最重要的redis-server和redis-cli了,其他的先不用管,开始尝试运行应用吧。
评论