1. 程式人生 > >引入第三方類庫衝突報錯

引入第三方類庫衝突報錯

在工程內引入了zbar 和baidushare 。在編譯時,丟擲瞭如下異常:

- duplicate symbol _base64_encode in:
-     /Users/admin/Develope/TestThirdPart/TestThirdPart/ZBarSDK/libzbar.a(symbol.o)
-     /Users/admin/Develope/TestThirdPart/TestThirdPart/BaiduSocialShare/BaiduSocialShare.framework/BaiduSocialShare(base64.o)
- ld: 1 duplicate symbol for architecture i386
- clang: error: linker command failed with exit code 1 (use -v to see invocation)

The advanced solution: re-compile yourself the libzbar.a following this steps:

1 - Download the source code (you must have Mercurial for mac):

2 - In the xcode project edit the "libzbar" scheme and select Release in Build configuration


3 - Rename "base64_encode" in the "symbol.c" file,for example:
unsigned base64_encode (char *dst,constchar *src,unsigned srclen)  => unsigned base64_encode_zbar (char *dst,constchar *src,unsigned srclen)

4 - Compile libzbar for device AND for simulator, here the configuration:


4 - Find the compiled libzbar.a and go in the folder using Teminal.app, my folder:

/Users/kappe/Library/Developer/Xcode/DerivedData/zbar-gyozyrpbqzvslmfoadhqkwskcesd/Build/Products

In this folder you you should have two sub folder Release-iphoneos and Release-iphonesimulator

5 - using xcode command line tools build you universal lib:

lipo -create Release-iphoneos/libzbar.a Release-iphonesimulator/libzbar.a -o libzbar.a
 
the end  now you can use the libzbar.a created, both in device and simulator.