iOS加入微信分享時報錯的原因之一

2021-08-10 05:25:13 字數 1134 閱讀 3481

是因為在build setting裡面的other linker flags加入了-all_load引起的衝突後改為

-force_load空格/users/lili/desktop/xx/xx/classes/third/share/wechat/libwechatsdk.a
就沒有衝突了

普及知識:

關於xcode上的other linker flags
在最後一步需要把.o檔案和c語言執行庫鏈結起來,這時候需要用到ld命令。原始檔經過一系列處理以後,會生成對應的.obj檔案,然後乙個專案必然會有許多.obj檔案,並且這些檔案之間會有各種各樣的聯絡,例如函式呼叫。鏈結器做的事就是把這些目標檔案和所用的一些庫鏈結在一起形成乙個完整的可執行檔案。

如果要詳細研究鏈結器做了什麼,請看:

那麼,other linker flags設定的值實際上就是ld命令執行時後面所加的引數。

下面逐個介紹3個常用引數:

-objc:

加了這個引數後,鏈結器就會把靜態庫中所有的objective-c類和分類都載入到最後的可執行檔案中

-all_load:

會讓鏈結器把所有找到的目標檔案都載入到可執行檔案中,但是千萬不要隨便使用這個引數!假如你使用了不止乙個靜態庫檔案,然後又使用了這個引數,那麼你很有可能會遇到ld: duplicate symbol錯誤,因為不同的庫檔案裡面可能會有相同的目標檔案,所以建議在遇到-objc失效的情況下使用-force_load引數。

-force_load

這個flag所做的事情跟-all_load其實是一樣的,只是-force_load需要指定要進行全部載入的庫檔案的路徑,這樣的話,你就只是完全載入了乙個庫檔案,不影響其餘庫檔案的按需載入 .

最後總結一下:

個人建議objc與force_load搭配使用比較好.

-all_load就是會載入靜態庫檔案中的所有成員,

-objc就是會載入靜態庫檔案中實現乙個類或者分類的所有成員,

-force_load(包的路徑)就是會載入指定路徑的靜態庫檔案中的所有成員。

所以對於使用runtime時候的反射呼叫的方法應該使用這三個中的乙個進行link,以保證所有的類都可以載入到記憶體中供程式動態呼叫。

ios微信分享的相容性問題

這種方法在安卓上完全正常,好用得令人髮指,但是 ios卻不是省油燈 ios的分享 引數都沒帶上來 鏈結是第一次進入的頁面 破案 ios 每次切換路由,spa的url是不會變的,發起簽名請求的url引數必須是當前頁面的url就是最初進入頁面時的url android 每次切換路由,spa的url是會變...

iOS應用開發,在系統分享列表中加入自己的應用

參考 quicklook,ios專案整合文件檢視功能 這篇文章,我所做的應用,增加了乙個新的需求,那就是把其他應用分享給我的檔案新增到上傳任務 這裡我分享下如何讓我們的應用出現在任何檔案分享的情況下 我們來新建乙個專案 以sourcecode的方式開啟info.plist 在檔案中加入如下 這裡我選...

ios接入微信SDK的一些坑(後期會陸續更新)

一 nsarraym enqueue unrecognized selector sent to instance 0x170058ae0 原因 未新增other linker flags,請在build setting裡仔細檢查是否新增flags 方法 新增flags,如圖 二 d symbol ...