支付宝SDK和ZBar SDK冲突问题

项目中同时用到了支付宝和ZBar,结果报base64加密冲突问题:

。。。。。。/Alipay/AlipayRsaLib.a(base64.o)

。。。。。。/ZBarSDK/libzbar.a(symbol.o)

ld: 1 duplicate symbol for architecture i386

clang: error: linker command failed with exit code 1 (use -v to see invocation)


按照下面这个博客的方案

http://blog.csdn.net/u012894479/article/details/37926027

找到TARGETS——》BulidSetting——》Linking——》Other Linker Flags中的-all_load标志删除就可以了。

支付宝SDK和ZBar SDK冲突问题_第1张图片

 

==================2014-11-04更新===================================
问题又来了,经过测试发现把-all_load删掉之后项目中的百度分享点击分享到某个平台的按钮没有反应了。看来只能想办法解决这个base64冲突问题了。。。。。。

http://zbar.hg.sourceforge.net/hgweb/zbar/zbar/file/146b857ff41a

将这个文件包下载下来,我的文件夹名字是:zbar-code-38e78368283d5afe34bbc0cedb36d4540cda3a30,打开这个文件夹,找到iphone文件夹,如下用xcode打开zbar.xcodeproj

打开symbol.c文件,搜索base64_encode,都改为base64_en。

然后编译。项目都Products目录中会输出一个libzbar.a文件。

打开终端,看看这个文件都架构:先在命令行中输入lipo -info 命令,然后再把libzbar.a拖到命令行中,这样它的路径就出现在了lipo -info 命令之后,回车就会看到类似这样的信息:

xxx:~ tkinghr$ lipo -info /Users/tkinghr/Library/Developer/Xcode/DerivedData/zbar-ejrqvigurvajrbewazseekfjufnn/Build/Products/Release-iphonesimulator/libzbar.a 

Architectures in the fat file: /Users/tkinghr/Library/Developer/Xcode/DerivedData/zbar-ejrqvigurvajrbewazseekfjufnn/Build/Products/Release-iphonesimulator/libzbar.a are: i386 x86_64 

意思就是支持i386 x86_64两种架构。

我分别生成了Debug和Release模式下的libzbar.a文件,然后再将它们合并成一个libzbar.a文件。合并的命令是lipo -create 第一个libzbar.a的目录 第二个libzbar.a的目录 -output 合并后的libzbar.a的目录(比如/Users/用户名/Desktop/libzbar.a)同样的,第一个和第二个libzbar.a的目录,可以直接将目标文件拖到命令行中就会自动生成。

然后再用命令lipo -info 合并后的libzbar.a文件的目录 来查看我自己生成的.a文件的信息,显示了:i386 x86_64 armv7 armv7s arm64   表示支持这5中架构。非常兴奋滴将其替换掉原来项目中的libzbar.a文件,然后发现在真机上面可以正常运行,百度分享可以使用了,二维码也可以扫描了,但是在模拟器上面运行的时候扫描二维码的时候总是在ZBarReaderViewController.m文件的

UIView *view = self.view;

    if(controls) {

        assert(controls.superview == view);

        [view bringSubviewToFront: controls];

        return;

    }

断言assert(controls.superview == view);处断掉,然后奔溃退出。很奇怪的说。。。。。。。。


后来我查看了原来项目中使用的libzbar.a文件的信息,它支持armv7 armv7s i386 三种架构。我就又用

lipo 合并后的libzbar.a文件的目录   -thin   支持的目标架构(比如armv7)  -output   新的支持某目标架构的.a文件的目录(比如/Users/用户名/Desktop/libzbar_armv7.a)分别对libzbar.a进行瘦身,生成了libzbar_armv7.a libzbar_armv7s.a 和 libzbar_i386.a。

再然后,用命令lipo -create /Users/用户名/Desktop/libzbar_armv7.a /Users/用户名/Desktop/libzbar_armv7s.a /Users/用户名/Desktop/libzbar_i386.a -output /Users/用户名/Desktop/libzbar.a 生成了支持armv7 armv7s i386 三种架构的libzbar.a文件。然后放到项目中替换原来的.a文件。OMG,还是在模拟器上运行扫描不了二维码,奔溃了我。

再后来在网上找了一个别人打包好的libzbar.a文件解决了这个问题,可能是我项目中用到的zbar的代码跟我下载的源代码有差别吧。。。。。。。具体原因不明,如果哪位大神知道问题所在,还望不吝赐教!




你可能感兴趣的:(xcode,支付宝,6,zbar,静态库冲突)