關於ZBar與支付寶 symbol _base64_encode 的解決方案
專案中要使用二維碼掃描的功能,選擇使用二維碼第三方庫:ZBar,匯入之後發現有symbol _base64_encode問題,ZBar和支付寶這兩個第三方中有靜態庫衝突。記錄一下解決的過程。
1.github上下載ZBar檔案,解壓之後,開啟這個資料夾,找到iPhone資料夾,開啟這個資料夾,找到zbar.xcodeproj。
2.在Xcode中開啟zbar.xcodeproj,設定為release版本。在src/zbar下找到symbol.c,選中這個.c檔案,在其中搜索base64_encode,將所有的base64_encode都改為base64_en(這個可以任意)。修改之後command+B編譯一下,這樣會生成我們想要的檔案,同時也確保沒有任何問題。
3.通過上面的步驟之後,會在/Users/bill/Library/Developer/Xcode/DerivedData/zbar-cbhnistursuyeqcnnknvklqmnxab/Build/Products/Release-iphoneos資料夾下生成libzbar.a檔案(請根據自己的目錄來尋找),這就是所需要的檔案了。同時,可以在模擬器,真機下和debug,release模式下生成4種檔案。
4.開啟終端,檢視一下這個libzar.a的相關資訊。
lipo -info /Users/bill/Library/Developer/Xcode/DerivedData/zbar-cbhnistursuyeqcnnknvklqmnxab/Build/Products/Release-iphoneos/libzbar.a
輸出>>Architectures in the fat file: /Users/bill/Library/Developer/Xcode/DerivedData/zbar-cbhnistursuyeqcnnknvklqmnxab/Build/Products/Release-iphoneos/libzbar.a are: armv7 armv7s
這說明還少一個i386形式的。
5.生成一個i386的libzbar.a,我直接放到桌面上了,還是使用命令列(根據自己的修改)
lipo /Users/bill/Library/Developer/Xcode/DerivedData/zbar-cbhnistursuyeqcnnknvklqmnxab/Build/Products/Release-iphoneos/libzbar.a -arch i386 /Users/bill/Library/Developer/Xcode/DerivedData/zbar-cbhnistursuyeqcnnknvklqmnxab/Build/Products/Release-iphonesimulator/libzbar.a
-create -output /Users/bill/Desktop/libzbar.a
6.在終端檢視一下這個新生成的libzbar.a的架構。
lipo -info /Users/bill/Desktop/libzbar.a
輸出>>Architectures in the fat file: /Users/bill/Desktop/libzbar.a are: armv7 armv7s i386
ok。搞定,現在,可以使用這個libzbar.a去替換ZBarSDK中的libzbar.a檔案。這樣就可以解決zbar和支付寶中關於symbol _base64_encode衝突的問題。