今天大致搞明白了動(dòng)態(tài)庫(kù)的一些原理毛萌,比如intall_name,rpath,@loader_patch,@executable_path配置的大概作用梢什。
以及-XLinker的使用
不過印象還不夠清晰,懂的也不是很徹底朝聋。后續(xù)有機(jī)會(huì)繼續(xù)深入嗡午。
主要搞明白了,上面幾個(gè)路徑是xcode動(dòng)態(tài)庫(kù)會(huì)增加的配置冀痕,用于動(dòng)態(tài)庫(kù)加載時(shí)的尋找路徑荔睹。對(duì)于realTime來說,不設(shè)也沒關(guān)系言蛇。
看了sajia關(guān)于動(dòng)態(tài)庫(kù)的一些分享僻他。看過就忘了腊尚。
中午瀏覽了一下性能組的一些文檔吨拗,沒有太多收獲。
下午又修改了一下依賴分析工具婿斥。覺得需要把動(dòng)態(tài)庫(kù)打失敗的一些原因搞清楚
主要有3個(gè)原因:
本來就是動(dòng)態(tài)庫(kù)-_-,所以arch動(dòng)態(tài)庫(kù)失敗了劝篷。
一些設(shè)計(jì)C++的庫(kù),沒發(fā)現(xiàn)原因
const常量命名不規(guī)范民宿,導(dǎo)致import頭文件后娇妓,定義了多個(gè)同名常量的符號(hào)。
判斷如果是動(dòng)態(tài)庫(kù)活鹰,就移過去不需要arch
暫時(shí)不處理哈恰。
暫時(shí)不處理。
-ObjC:加了這個(gè)參數(shù)后志群,鏈接器就會(huì)把靜態(tài)庫(kù)中所有的Objective-C類和分類都加載到最后的可執(zhí)行文件中(有個(gè)bug着绷,如果有Category,但是沒有Category的主類锌云,那么Category不會(huì)被加載)
-all_load:會(huì)讓鏈接器把所有找到的目標(biāo)文件都加載到可執(zhí)行文件中荠医,但是千萬(wàn)不要隨便使用這個(gè)參數(shù)!假如你使用了不止一個(gè)靜態(tài)庫(kù)文件宾抓,然后又使用了這個(gè)參數(shù)子漩,那么你很有可能會(huì)遇到ld:
duplicate symbol錯(cuò)誤,因?yàn)椴煌膸?kù)文件里面可能會(huì)有相同的目標(biāo)文件石洗,所以建議在遇到-ObjC失效的情況下使用-force_load參數(shù)。
-force_load:所做的事情跟-all_load其實(shí)是一樣的紧显,但是-force_load需要指定要進(jìn)行全部加載的庫(kù)文件的路徑讲衫,這樣的話,你就只是完全加載了一個(gè)庫(kù)文件,不影響其余庫(kù)文件的按需加載涉兽。