让这个该死的服务跑起来了~
#前言
被該死的Openssl編譯嘲諷了一個(gè)下午
之前的文章說(shuō)了我的那個(gè)編譯的問(wèn)題,這里說(shuō)下,知識(shí)點(diǎn)有點(diǎn)零散,最后的解決也是一個(gè)同事提示,感覺(jué)也有點(diǎn)奇葩的趕腳。到目前為止,我現(xiàn)在感受到了寫(xiě)文章的好處,昨晚的問(wèn)題,發(fā)出去后,守望就找我,跟我說(shuō)自己解決過(guò)這個(gè)問(wèn)題,然后就巴拉巴拉了一下,我就知道怎么解決了,講真的,搞這種開(kāi)源庫(kù)出現(xiàn)的問(wèn)題很考驗(yàn)人,一個(gè)要懂這些東西,懂了之后還有會(huì)學(xué),還需要用工具去分析。
我之前有一次開(kāi)會(huì)跟老板說(shuō),三個(gè)臭皮匠能比上一個(gè)諸葛亮,我們做的很多工作都是搬運(yùn)的行為,既然不是1000%的核心競(jìng)爭(zhēng)力,那么知識(shí)溝通就顯得非常重要,去獲取別人知道的知識(shí),也會(huì)一種技能,所以就出現(xiàn)了各種技術(shù)溝通交流群。
看看昨天的那個(gè)錯(cuò)誤日志。
#正文
先分析下上面的原因,可能去看很多百度什么的,google什么的,說(shuō)的都很詭異的。
先看看這個(gè)文件存在不
從圖片中提示的路徑里面看,這個(gè)路徑應(yīng)該是沒(méi)有問(wèn)題了。
再看這個(gè)文件的格式對(duì)不對(duì)
readelf -h libreadline.a看到這里我傻眼了,因?yàn)槲覀兊男马?xiàng)目需要一個(gè)32位的服務(wù),我是想編譯32位的,但是這里是64位的庫(kù),能編譯通過(guò)才怪。
這里說(shuō)下這個(gè)工具 readelf ,這個(gè)工具可以用來(lái)查看文件的屬性。比較具體的可以看這個(gè)鏈接
https://blog.csdn.net/yfldyxl/article/details/81566279
1、選項(xiàng) -h(elf header),顯示elf文件開(kāi)始的文件頭信息。
2、選項(xiàng) -l(program headers),segments 顯示程序頭(段頭)信息(如果有數(shù)據(jù)的話(huà))。
3、選項(xiàng) -S(p headers),ps 顯示節(jié)頭信息(如果有數(shù)據(jù)的話(huà))。
4、選項(xiàng) -g(p groups),顯示節(jié)組信息(如果有數(shù)據(jù)的話(huà))。
5、選項(xiàng) -t,p-details 顯示節(jié)的詳細(xì)信息(-S的)。
6、選項(xiàng) -s,symbols 顯示符號(hào)表段中的項(xiàng)(如果有數(shù)據(jù)的話(huà))。
7、選項(xiàng) -e,headers 顯示全部頭信息,等價(jià)于: -h -l -S 。
8、選項(xiàng) -n,notes 顯示note段(內(nèi)核注釋)的信息 。
9、選項(xiàng) -r,relocs 顯示可重定位段的信息。
10、選項(xiàng) -u,unwind 顯示unwind段信息。當(dāng)前只支持IA64 ELF的unwind段信息。
11、選項(xiàng) -d,dynamic 顯示動(dòng)態(tài)段的信息。
12、選項(xiàng) -V,version-info 顯示版本段的信息。
13、選項(xiàng) -A,arch-specific 顯示CPU構(gòu)架信息。
14、選項(xiàng) -I,histogram 顯示符號(hào)的時(shí)候,顯示bucket list長(zhǎng)度的柱狀圖。
15、選項(xiàng) -x,hex-dump=<number or name> 以16進(jìn)制方式顯示指定段內(nèi)內(nèi)容。number指定段表中段的索引,或字符串指定文件中的段名
16、選項(xiàng) -D,use-dynamic 使用動(dòng)態(tài)段中的符號(hào)表顯示符號(hào),而不是使用符號(hào)段 。
17、選項(xiàng) -a,all 顯示全部信息,等價(jià)于 -h -l -S -s -r -d -V -A -I。
18、選項(xiàng) -v,version 顯示readelf的版本信息。
19、選項(xiàng) -H,help 顯示readelf所支持的命令行選項(xiàng)。
#過(guò)程很有意思
然后我就去看這個(gè)庫(kù)在哪里生成的,然后就看到了readline這個(gè)東西,這個(gè)也是一個(gè)開(kāi)源庫(kù),主要是用來(lái)處理數(shù)據(jù)格式轉(zhuǎn)換的。
所以如果你是做開(kāi)源方面的處理的話(huà),可能會(huì)經(jīng)常用來(lái)做上下位機(jī)的數(shù)據(jù)處理,里面還有一些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.
然后我就去看這個(gè)庫(kù)原來(lái)的編譯方式,我們編譯64位的時(shí)候,是這樣編譯的。
我們想編譯32位的庫(kù)需要修改為
主要區(qū)別在這個(gè) --host的參數(shù)上 看看是什么意思這個(gè)參數(shù)的含義是在configure文件里面,不是在Makefile里面,Makefile是通過(guò)configure配置生成的,我剛開(kāi)始還傻傻的去修改Makefile,這肯定是不對(duì)的。所以我們要修改什么,就通過(guò)配置傳不同的內(nèi)容進(jìn)去。
cross-complie可以理解為交叉編譯,一個(gè)在X86運(yùn)行的電腦,需要編譯ARM的東西,這就叫交叉。
而eabi 也是一個(gè)有意思的,abi對(duì)應(yīng)一種指令集,不同的CPU框架有不同的指令集,現(xiàn)在不是出現(xiàn)了什么開(kāi)源的CPU指令集,如果所有的CPU都支持相同的指令集,那肯定對(duì)我們非常有幫助,代碼也修改比較少。
如果是 32位的,我們可以使用readelf -h 看里面的Flags。
我們經(jīng)??吹降腅ABI是什么你們知道不?
EABI
Embedded Application Binary Interface翻譯成中文應(yīng)該是
嵌入式應(yīng)用二進(jìn)制接口,我覺(jué)得還是我上面說(shuō)的比較直接,就是不同的指令集。
安卓支持的CPU指令集框架如下
也可以認(rèn)為Android支持的CPU種類(lèi)如下
查看自己設(shè)備的CPU
最后成功跑起來(lái)的效果
中間省略了一些配置問(wèn)題,還需要配合一個(gè)apk一起測(cè)試使用
大家好,在評(píng)論寫(xiě)出你在工作和學(xué)習(xí)中遇到的調(diào)試問(wèn)題,我選出2位同學(xué)贈(zèng)送2本50元以?xún)?nèi)的書(shū)籍,書(shū)籍你可以自己選擇,你發(fā)購(gòu)買(mǎi)鏈接給我讓我代付就好了。
時(shí)間:截止2020年4月24號(hào) 20點(diǎn)
我選出后會(huì)評(píng)論回復(fù)你,然后你就可以加我微信跟我聯(lián)系了。
最近支持星球大家慢慢形成了討論的氛圍,希望有學(xué)習(xí)困擾的同學(xué)一起加入。
5塊錢(qián)加入我的知識(shí)星球~
感謝大家支持~
? 回復(fù)「?籃球的大肚子」進(jìn)入技術(shù)群聊
回復(fù)「1024」獲取1000G學(xué)習(xí)資料
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的让这个该死的服务跑起来了~的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 非华为电脑安装华为电脑管家11.1.1.
- 下一篇: 存储对手机性能的影响