最近專案組在做一些第三方功能的整合,不止一次的遇到第三方庫衝突的問題,報錯如下:
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二、去除不同的.a檔案之間內含衝突的庫,如openudid庫的衝突。檢視object file檔案資訊:
nm ***.a | grep ".o:" | sed "s/.(//g" | sed "s/).//g" | uniq
1. 檢視architectureslipo -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...