SylixOS 应用移植指导——以Redis5.0.3为例(五)

tc666
tc666
tc666
8
文章
1
评论
2021年7月26日15:29:27 评论 734

四、完善Makefile

既然liblua和libhiredis都有了,那就照葫芦画瓢,把redis-cli和redis-server的Makefile构造出来。

根据make流程的log,找到redis-server依赖的所有.o:SylixOS 应用移植指导——以Redis5.0.3为例(五)

根据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目录下找。SylixOS 应用移植指导——以Redis5.0.3为例(五)

将redis-server.mk加入Makefile,并放在libhiredis.mk和liblua.mk之下。尝试编译一下,发现报了些错误:

SylixOS 应用移植指导——以Redis5.0.3为例(五)

一个个看看,首先是没找着M_PI这个宏,追一下发现是在编译器的math.h里实现的,没事,我们在geohash_helper.c和server.h里定义一下:

SylixOS 应用移植指导——以Redis5.0.3为例(五)

另一个问题,发现是有个函数名称和内核的宏定义冲突了:

SylixOS 应用移植指导——以Redis5.0.3为例(五)

这个也很简单,我们把moduleLoad undef掉就行:

SylixOS 应用移植指导——以Redis5.0.3为例(五)

所有的修改都用#ifdef SYLIXOS包一下,方便以后排查,也不会影响原应用编译逻辑。

编译一下,发现编译通过了。先不着急测试,继续编redis-cli:redis-cli.mk

尝试编译一下,也过了。

现在我们已经有了最重要的redis-server和redis-cli了,其他的先不用管,开始尝试运行应用吧。

tc666
  • 本文由 发表于 2021年7月26日15:29:27
  • 转载请务必保留本文链接:http://www.databusworld.cn/10412.html
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: