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

tc666
tc666
tc666
8
文章
1
评论
2021年7月26日15:59:49 评论 645

五、排查符号表问题

我们现在编译已经可以通过了,但实际上APP未必能运行。这是因为SylixOS作为嵌入式操作系统,APP采用的是交叉编译的方式,即编译环境与运行环境是完全两套场景。这意味着,编译器在编译的时候,并不能确定某些符号,在运行环境中是否存在,所以不能报错,最多只会产生编译告警。而实际上只要声明了那些函数或变量,连告警都不会产生。

实际能不能运行,只能上传到SylixOS环境中验证。先把要上传的文件添加到Device Settings里:

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

因为我们的liblua都是以静态库的形式链接进app的,所以不需要再上传。将libhiredis.so上传到/lib目录下,其他传到/apps/redis下。这里我是用模拟器作为运行环境,模拟器的使用和配置方式,参考《RealEvo-Simulator使用手册.pdf》,这里就不再赘述了。

先从简单的来,尝试 ./redis-cli 运行client,发现报了一个找不到的符号表:

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

遇到这种问题,一般先搜索本工程(redis),确认一下这个符号是工程内实现的,还是base里实现的。找到使用的位置,按住ctrl+鼠标左键追踪一下,发现是base里实现的,实现的位置在libcextern的目录里,说明此符号是通过SylixOS的额外C库实现的,即函数实现在libcextern.so中,所以需要在APP的makefile里指定链接libcextern.so。

实际上redis-server里一样有这个问题,修改一下makefile:redis-cli.mk redis-server.mk

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

这样改完需要rebuild工程才有效,rebuild以后再上传。尝试运行一下redis-cli:SylixOS 应用移植指导——以Redis5.0.3为例(六)

这说明APP已经可以运行了,先放一边,继续验证redis-server:

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

发现redis-server也已经可以运行了(server打印的时间还有问题),那运行着server,看看redis-cli能不能连接上server:

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

发现cli可以连上server,但貌似存在什么莫名其妙的问题,并没有响应我的命令,而且换行也很奇怪。

没事,起码移植的前两步已经完成了,开始慢慢的测和查吧。

 

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

发表评论

匿名网友 填写信息

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