Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 505|回复: 0

iphone 开发中使用zbar时遇到的几个典型问题解决方法。

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-4-12 16:45:04 | 显示全部楼层 |阅读模式
    iphone 开发中使用zbar时遇到的几个典型问题解决方法。
     
    在近期的一个ios项目中使用到了一个二维码扫描库(Qrcode)--ZBar, 期间遇到2个问题。
     
    1. zbar下载后使用其libzbar.a 发现无法再arm7上运行。
    2. zbar使用过程中,如果多次打开摄像头扫描Qrcode,会出现memory leak problem, 导致其内存指数型增长,大概8次调用后即耗费了85M 左右的内存, 最后导致app崩溃。
    3. libzbar.a 在重新编译后, 无法再在simulator中运行,编译链接时出现错误提示:
    Undefined symbols for architecture armv7:
      "_OBJC_CLASS_$_ZBarReaderViewController", referenced from:
          objc-class-ref in HelloWorldViewController.o
      "_ZBarReaderControllerResults", referenced from:
          -[HelloWorldViewController imagePickerController:didFinishPickingMediaWithInfo:] in HelloWorldViewController.o
    ld: symbol(s) not found for architecture armv7
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
     
     
    1.libzbar.a无法编译链接成功的问题。
    打开zbar.xcodeprj ,在指定的a7 simulator平台或者实机上重新编译,将libzbar.a替换原有的。
     
     
    2. mem leak 问题的解决。
    找到ZBarReaderViewController.m 修改其loadView方法,改成如下形式。
     
    - ( void ) loadView
    {
        self . view  = [[[ UIView  alloc ]
                        initWithFrame :  CGRectMake  ( 0  ,  0  ,  320  ,  480  )]  autorelease  ];
    }
     
    添加了autorelease之后, 其内存使用状况就可以稳定在0.1M的范围内。
     
    3. zbar的此问题出现的原因是: 在我解决上面的第二个问题时,只提取了Debug-iphoneos文件夹下的libzbar.a,此文件只能被实机link, 若要使得编译结果能device 和 simulator都能link, 可以依照如下方法解决。
    主要思路:
    1. 重编译时,设置Build Settings下的Architectures 和 valid Architectures为 arm64, armv7 , armv7s.
    2. 重编译时,设置iOs deployment target 为ios 7.0 .
    3. 在Product菜单中选择Schema->Edit Schema->Run->Build Configuration 为: Release。
    4. 选择libzbar 分别选择不同实机和设备, 点击三角Run。
    5. 在Xcode 工作区Products下非红色的libzbar.a ,右键找到其所在目录。 返回上一级
    6. 运行: lipo -create Release-iphoneos/libzbar.a Release-iphonesimulator/libzbar.a -o libzbar.a
    7. 拖拽 生成的libzbar.a 到 xcode 工程目录中, 选择copy到工作区。 
    8. 完成!
     
     
    参考:
    http://stackoverflow.com/questions/22560899/xcode-5-1-undefined-symbols-for-architecture-x86-64-zbar
    http://stackoverflow.com/questions/5387076/running-a-release-build-with-xcode-4
    http://stackoverflow.com/questions/5287213/how-can-i-build-for-release-distribution-on-the-xcode-4
    http://stackoverflow.com/questions/5706548/how-do-i-create-a-release-build-in-xcode-4
    http://stackoverflow.com/questions/12339969/zbar-ifdef-issue-with-minizip-in-ios
    http://stackoverflow.com/questions/18638319/zbar-memory-leak-on-ios
     
    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-16 08:26 , Processed in 0.062159 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表