让这个该死的服务跑起来了~
发布日期:2021-06-30 18:45:07 浏览次数:3 分类:技术文章

本文共 2722 字,大约阅读时间需要 9 分钟。

#前言

之前的文章说了我的那个编译的问题,这里说下,知识点有点零散,最后的解决也是一个同事提示,感觉也有点奇葩的赶脚。到目前为止,我现在感受到了写文章的好处,昨晚的问题,发出去后,守望就找我,跟我说自己解决过这个问题,然后就巴拉巴拉了一下,我就知道怎么解决了,讲真的,搞这种开源库出现的问题很考验人,一个要懂这些东西,懂了之后还有会学,还需要用工具去分析。

我之前有一次开会跟老板说,三个臭皮匠能比上一个诸葛亮,我们做的很多工作都是搬运的行为,既然不是1000%的核心竞争力,那么知识沟通就显得非常重要,去获取别人知道的知识,也会一种技能,所以就出现了各种技术沟通交流群。

看看昨天的那个错误日志。

#正文

先分析下上面的原因,可能去看很多百度什么的,google什么的,说的都很诡异的。

  • 先看看这个文件存在不

从图片中提示的路径里面看,这个路径应该是没有问题了。

  • 再看这个文件的格式对不对

readelf -h libreadline.a看到这里我傻眼了,因为我们的新项目需要一个32位的服务,我是想编译32位的,但是这里是64位的库,能编译通过才怪。

这里说下这个工具 readelf ,这个工具可以用来查看文件的属性。比较具体的可以看这个链接

https://blog.csdn.net/yfldyxl/article/details/81566279

1、选项 -h(elf header),显示elf文件开始的文件头信息。

2、选项 -l(program headers),segments 显示程序头(段头)信息(如果有数据的话)。

3、选项 -S(p headers),ps 显示节头信息(如果有数据的话)。

4、选项 -g(p groups),显示节组信息(如果有数据的话)。

5、选项 -t,p-details 显示节的详细信息(-S的)。

6、选项 -s,symbols 显示符号表段中的项(如果有数据的话)。

7、选项 -e,headers 显示全部头信息,等价于: -h -l -S 。

8、选项 -n,notes 显示note段(内核注释)的信息 。

9、选项 -r,relocs 显示可重定位段的信息。

10、选项 -u,unwind 显示unwind段信息。当前只支持IA64 ELF的unwind段信息。

11、选项 -d,dynamic 显示动态段的信息。

12、选项 -V,version-info 显示版本段的信息。

13、选项 -A,arch-specific 显示CPU构架信息。

14、选项 -I,histogram 显示符号的时候,显示bucket list长度的柱状图。

15、选项 -x,hex-dump=<number or name> 以16进制方式显示指定段内内容。number指定段表中段的索引,或字符串指定文件中的段名

16、选项 -D,use-dynamic 使用动态段中的符号表显示符号,而不是使用符号段 。

17、选项 -a,all 显示全部信息,等价于 -h -l -S -s -r -d -V -A -I。

18、选项 -v,version 显示readelf的版本信息。

19、选项 -H,help 显示readelf所支持的命令行选项。

#过程很有意思

然后我就去看这个库在哪里生成的,然后就看到了readline这个东西,这个也是一个开源库,主要是用来处理数据格式转换的。

所以如果你是做开源方面的处理的话,可能会经常用来做上下位机的数据处理,里面还有一些samples文件,有兴趣的可以去看看。

Introduction

This is the Gnu Readline library, version 8.0.

The Readline library provides a set of functions for use by applications that allow users to edit command lines as they are typed in.  Both Emacs and vi editing modes are available.  The Readline library includes additional functions to maintain a list of previously-entered command lines, to recall and perhaps reedit those lines, and perform csh-like history expansion on previous commands.

然后我就去看这个库原来的编译方式,我们编译64位的时候,是这样编译的。

我们想编译32位的库需要修改为

主要区别在这个 --host的参数上 看看是什么意思这个参数的含义是在configure文件里面,不是在Makefile里面,Makefile是通过configure配置生成的,我刚开始还傻傻的去修改Makefile,这肯定是不对的。所以我们要修改什么,就通过配置传不同的内容进去。

cross-complie可以理解为交叉编译,一个在X86运行的电脑,需要编译ARM的东西,这就叫交叉。

而eabi 也是一个有意思的,abi对应一种指令集,不同的CPU框架有不同的指令集,现在不是出现了什么开源的CPU指令集,如果所有的CPU都支持相同的指令集,那肯定对我们非常有帮助,代码也修改比较少。

如果是 32位的,我们可以使用readelf -h 看里面的Flags。

我们经常看到的EABI是什么你们知道不?

EABI

Embedded Application Binary Interface

翻译成中文应该是

嵌入式应用二进制接口,我觉得还是我上面说的比较直接,就是不同的指令集。

安卓支持的CPU指令集框架如下

也可以认为Android支持的CPU种类如下

查看自己设备的CPU


最后成功跑起来的效果

中间省略了一些配置问题,还需要配合一个apk一起测试使用

大家好,在评论写出你在工作和学习中遇到的调试问题,我选出2位同学赠送2本50元以内的书籍,书籍你可以自己选择,你发购买链接给我让我代付就好了。

时间:截止2020年4月24号 20点

我选出后会评论回复你,然后你就可以加我微信跟我联系了。

最近支持星球大家慢慢形成了讨论的氛围,希望有学习困扰的同学一起加入。

感谢大家支持~

  回复「 篮球的大肚子」进入技术群聊

回复「1024」获取1000G学习资料

转载地址:https://linus.blog.csdn.net/article/details/105721284 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:LinuxGPIO操作和MTK平台GPIO
下一篇:camera-open-log

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月24日 05时32分05秒