iOS 第三方庫衝突的處理

2021-06-28 09:44:16 字數 3046 閱讀 2955

最近專案組在做一些第三方功能的整合,不止一次的遇到第三方庫衝突的問題,報錯如下:

1

2

3

4

5

6

duplicate

symbol

_objc_metaclass_

$_jkserializerin:

/users

/tony

/desktop

/***project

/lib

/libmipushsdk.a

(jsonkit.o

)

/users

/tony

/library

/developer

/xcode

/deriveddata

/***project

-boqkajmzatzxohbyrrhklfiuknic

/build

/products

/debug

-iphoneos

/libpods.a

(jsonkit.o

) ld:24

duplicate

symbols

for

architecture

armv7

clang

: error

: linker

command

failed

with

exit

code1(

use-

vto

see

invocation

)

在這個報錯中,原因是第三方中自己打包了jsonkit庫,而我們的專案中也使用了這個庫。這種情況需要我們將第三方sdk中衝突的庫移除掉,即將它拆包後重打包處理。

首先按照上述錯誤中提到的路徑找到庫檔案:/users/tony/desktop/***project/lib/libmipushsdk.a,將它拷貝乙份出來做進一步處理。

12 cd

~/&&mkdir

librepack

&&cd

librepack

cp/users

/tony

/desktop

/***project

/lib

/libmipushsdk.a

./libx.a

檢視包資訊:lipo -info libx.a

如果提示fat file,那麼代表這個包是支援多平台的,例如armv7,armv7s,i386等,這需要我們逐一做解包重打包操作。否則我們只需要做一次[1-6]操作即可

建立臨時資料夾,用於存放armv7平台解壓後的.o檔案:mkdir armv7

取出armv7平台的包:lipo libx.a -thin armv7 -output armv7/libx-armv7.a

檢視庫中所包含的檔案列表:ar -t armv7/libx-armv7.a

解壓出object file(即.o字尾檔案):cd armv7 && ar xv libx-armv7.a

找到衝突的包(jsonkit),刪除掉rm jsonkit.o

重新打包object file:cd .. && ar rcs libx-armv7.a armv7/*.o,可以再次使用[2]中命令確認是否已成功將檔案去除

將其他幾個平台(armv7s, i386)包逐一做上述[1-6]操作

重新合併為fat file的.a檔案:

lipo -create libx-armv7.a libx-armv7s.a libx-i386.a -output libmipushsdk-new.a

拷貝到專案中覆蓋原始檔:

cp libmipushsdk-new.a /users/tony/desktop/***project/lib/libmipushsdk.a

monday, sep 16th, 2013 

| posted in 

未分類| 1 comment

在引用第三方庫時,不時的會碰到諸如庫衝突、庫包含了某些禁用的api等問題,而這些庫往往都被打包成了靜態庫檔案(即 .a檔案)來使用。這時就需要我們能夠去對object file進行一些必要的處理調整。如檢索資訊,移除衝突的庫等。以下是一些常用的方法:

一、 查詢.a檔案中是否包含相關資訊,如蘋果禁用的unique identifier。

find  .  -name *.a |xargs grep uniqueidentifier

檢視object file檔案資訊:

nm  ***.a | grep ".o:" | sed "s/.(//g" | sed "s/).//g" | uniq

二、去除不同的.a檔案之間內含衝突的庫,如openudid庫的衝突。

1. 檢視architectures

lipo  -info  libx.a

2. 如果是fat file,處理成non-fat

lipo  libx.a  -thin armv7  -output  libx-armv7.a

3. 解壓出object file

ar  xv  libx-armv7.a

4. 打包object file

ar  rcs   libx.a   *.o

5. 生成fat file

lipo  -create  libarmv7.a  -output  libx.a

6. 合併.a檔案

lipo  -create  libarmv6.a  libarmv7.a  -output  lib.a

iOS 第三方庫衝突的處理

最近專案組在做一些第三方功能的整合,不止一次的遇到第三方庫衝突的問題,報錯如下 1 2 3 4 5 6 duplicate symbol objc metaclass jkserializerin users tony desktop project lib libmipushsdk.a jsonk...

iOS 第三方庫

afnetworking 網路請求元件 fmdb 本地資料庫元件 sdwebimage 多個縮圖快取元件 uickeychainstore 存放使用者賬號密碼元件 reachability 監測網路狀態 datetools 友好化時間 mbprogresshud 一款提示框第三方庫 mwphotob...

IOS開發第三方庫

1.afnetworking 輕量級而又超級高效的ios網路程式設計框架,它支援ios5.0及以上版本。2.sstoolkit 非常簡單有用的工具,除了提供一些ui介面元素外,它還可以幫我們解決一些常見問題 3.gpuimage 4.socketrocket 5.hocketkit 可以使用它進行b...