让这个该死的服务跑起来了~
#前言
被該死的Openssl編譯嘲諷了一個下午
之前的文章說了我的那個編譯的問題,這里說下,知識點有點零散,最后的解決也是一個同事提示,感覺也有點奇葩的趕腳。到目前為止,我現在感受到了寫文章的好處,昨晚的問題,發出去后,守望就找我,跟我說自己解決過這個問題,然后就巴拉巴拉了一下,我就知道怎么解決了,講真的,搞這種開源庫出現的問題很考驗人,一個要懂這些東西,懂了之后還有會學,還需要用工具去分析。
我之前有一次開會跟老板說,三個臭皮匠能比上一個諸葛亮,我們做的很多工作都是搬運的行為,既然不是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點
我選出后會評論回復你,然后你就可以加我微信跟我聯系了。
最近支持星球大家慢慢形成了討論的氛圍,希望有學習困擾的同學一起加入。
5塊錢加入我的知識星球~
感謝大家支持~
? 回復「?籃球的大肚子」進入技術群聊
回復「1024」獲取1000G學習資料
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的让这个该死的服务跑起来了~的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 非华为电脑安装华为电脑管家11.1.1.
- 下一篇: 存储对手机性能的影响