关于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冲突的问题。



    已经修改的ZBarSDK

`zbar_image_format_t` 是 ZBar 库中表示图像格式的枚举类型,包括以下几种类型: ```c typedef enum zbar_image_format_e { ZBAR_NONE = 0, /**< no defined format */ ZBAR_PARTIAL = 1, /**< generic partial decode */ ZBAR_EAN2 = 2, /**< GS1 2-digit add-on */ ZBAR_EAN5 = 5, /**< GS1 5-digit add-on */ ZBAR_EAN8 = 8, /**< EAN-8 */ ZBAR_UPCE = 9, /**< UPC-E */ ZBAR_ISBN10 = 10, /**< ISBN-10 (from EAN-13). */ ZBAR_UPCA = 12, /**< UPC-A */ ZBAR_EAN13 = 13, /**< EAN-13 */ ZBAR_ISBN13 = 14, /**< ISBN-13 (from EAN-13). */ ZBAR_COMPOSITE = 15, /**< EAN/UPC composite */ ZBAR_I25 = 25, /**< Interleaved 2 of 5. */ ZBAR_CODE39 = 39, /**< Code 39. */ ZBAR_PDF417 = 57, /**< PDF417. */ ZBAR_QRCODE = 64, /**< QR Code. */ ZBAR_CODE128 = 128, /**< Code 128. */ ZBAR_SYMBOL = 0x00ff, /**< mask for base symbol type. */ ZBAR_ADDON2 = 0x0200, /**< 2-digit add-on flag. */ ZBAR_ADDON5 = 0x0500, /**< 5-digit add-on flag. */ ZBAR_ADDON = 0x0700, /**< add-on flag mask. */ } zbar_image_format_t; ``` 其中,`ZBAR_NONE` 表示未定义的格式,`ZBAR_PARTIAL` 表示部分解码格式,`ZBAR_EAN2` 表示 GS1 2 位附加码格式,`ZBAR_EAN5` 表示 GS1 5 位附加码格式,`ZBAR_EAN8` 表示 EAN-8 格式,`ZBAR_UPCE` 表示 UPC-E 格式,`ZBAR_ISBN10` 表示 ISBN-10 格式,`ZBAR_UPCA` 表示 UPC-A 格式,`ZBAR_EAN13` 表示 EAN-13 格式,`ZBAR_ISBN13` 表示 ISBN-13 格式,`ZBAR_COMPOSITE` 表示 EAN/UPC 组合码格式,`ZBAR_I25` 表示 Interleaved 2 of 5 格式,`ZBAR_CODE39` 表示 Code 39 格式,`ZBAR_PDF417` 表示 PDF417 格式,`ZBAR_QRCODE` 表示 QR Code 格式,`ZBAR_CODE128` 表示 Code 128 格式,`ZBAR_SYMBOL` 表示基本符号类型的掩码,`ZBAR_ADDON2` 表示 2 位附加码的掩码,`ZBAR_ADDON5` 表示 5 位附加码的掩码,`ZBAR_ADDON` 表示附加码的掩码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值