程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> cocoapods導致的符號重復問題分析和解決

cocoapods導致的符號重復問題分析和解決

編輯:C++入門知識

cocoapods導致的符號重復問題分析和解決




xplayer工程用了Pods,xplayerdemo_pods工程引用xplayer時又用了Pods,導致如下的鏈接錯誤:
duplicate symbol _OBJC_METACLASS_$_PodsDummy_Pods

類似:
duplicate symbol _OBJC_METACLASS_$_PodsDummy_Pods in:
    /Users/erikkerber/Dropbox/Projects/MillMain/MyLib.framework/BuddySDK(Pods-dummy.o)
    /Users/erikkerber/Library/Developer/Xcode/DerivedData/MillMain-fngfqhlslygksgcfuciznkpqfrbr/Build/Products/Debug-iphonesimulator/libPods.a(Pods-dummy.o)
duplicate symbol _OBJC_CLASS_$_PodsDummy_Pods in:
    /Users/erikkerber/Dropbox/Projects/MillMain/MyLib.framework/BuddySDK(Pods-dummy.o)
    /Users/erikkerber/Library/Developer/Xcode/DerivedData/MillMain-fngfqhlslygksgcfuciznkpqfrbr/Build/Products/Debug-iphonesimulator/libPods.a(Pods-dummy.o)
ld: 2 duplicate symbols for architecture i386


**********************嘗試刪除**********************
一種辦法是把demo工程裡Link Binary with Libraries裡的libPods.a的引用刪除即可。
但是這個方法無法用於自動構建,得尋找其他方案。


我們來看符號重復的原因:
xplayer這個靜態庫工程用了Pods,所以編譯鏈接了Pods-dummy.m文件。


而xplayerdemo_pods又用了Pods,又編譯鏈接了新的Pods-dummy.m文件。
導致了PodsDummy_Pods這個類重復。
所以思路是想辦法移除或重命名其中的一個Pods-dummy.m文件。
發現移除是不可行的,會導致無法生成libPods.a。


**********************嘗試重命名**********************
現在來試重命名。
首先想到的是將xplayer裡的Pods-dummy.m文件重命名,方法如下:
修改xplayer的Podfiles文件
platform :ios, ‘5.0'
target xplayer do
pod 'CocoaHTTPServer', '= 2.3'
pod 'Reachability', '~> 3.0
end


這樣xplayer工程生成的dummy類是PodsDummy_Pods_xplayer。
此時Build xplayerdemo_pods工程會報錯說PodsDummy_Pods_xplayer這個符號重復了: 這是因為xplayerdemo_pods的Pods包含了xplayer, 生成了第二個PodsDummy_Pods_xplayer類。
如果我們能修改target xplayer do裡的”xplayer”為其他字符串就好了,但是目前沒有找到這種解決方案。


現在剩下的辦法是將xplayerdemo_pods裡的Pods-dummy.m文件重命名,方法如下:
修改xplayerdemo_pods的Podfiles文件如下
platform :ios, '5.0'
target :xplayerdemo_pods do #增加target語句
pod 'xplayer', :podspec => 'http://repo.xx.com/specs/xplayer/0.0.1/xplayer.podspec'
end
這樣xplayerdemo_pods工程生成的dummy類是PodsDummy_Pods_xplayerdemo_pods。
這樣就不會和xplayer包含的dummy類PodsDummy_Pods重名了。
問題解決。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved