博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
让这个该死的服务跑起来了~
阅读量:1981 次
发布时间:2019-04-27

本文共 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学习资料

你可能感兴趣的文章
【学习笔记】英文科技论文常见英语句式积累
查看>>
【深度学习笔记】PixelShuffle
查看>>
【python3学习笔记】斜杠和双斜杠运算符的区别
查看>>
【深度学习笔记】torch.nn.Sequential(* args) 与 torch.nn.Module
查看>>
【深度学习笔记】用torch.nn.Sequential()搭建神经网络模型
查看>>
【深度学习笔记】用torch.nn.ModuleList搭建神经网络
查看>>
【解决错误】AttributeError: module ‘scipy.misc‘ has no attribute ‘imread‘
查看>>
【解决错误】复现RCAN的时候遇到了ImportError: cannot import name ‘_update_worker_pids’ from ‘torch._C’
查看>>
【解决错误】ModuleNotFoundError: No module named ‘skimage‘
查看>>
【深度学习笔记】pytorch的点乘(dot product)
查看>>
【深度学习笔记】残差
查看>>
【错误解决】cv2.error: OpenCV(4.2.0) C:\projects\opencv-python\opencv\modules\imgproc\sr
查看>>
【python学习笔记】读取指定文件夹中的图片,结合边缘保留滤波EPF
查看>>
【工具和环境】Linux下安装pycharm
查看>>
【Accumulation】The last two sentences of the abstract
查看>>
【Accumulation】The definition of SISR
查看>>
【工具与环境】Windows下安装Sublime Text 3
查看>>
【解决错误】ValueError: some of the strides of a given numpy array are negative.
查看>>
【工具与环境】Excel中批量插入行
查看>>
【个人实验注意事项】
查看>>