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

时间: 2024-10-12 18:18:19

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

Html开发中document.getElementByTagName无法找到所有DOM元素的问题解决方法

1 let eleList = document.querySelectorAll('li') 2 for (let i = 0; i < eleList.length; i++) { 3 // 遍历操作 4 } 只要使用querySelectorAll方法即可获取所有找到的DOM元素 原文地址:https://www.cnblogs.com/AirNess/p/9476354.html

WEB开发中一些常见的攻击方式及简单的防御方法

WEB开发中一些常见的攻击方式及简单的防御方法 20151127 转载http://www.lvtao.net/dev/582.html SQL注入最常见的攻击方式,所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击. 跨站脚本攻击(XSS)跨站脚本攻击(也称为XSS)指利用网站漏洞从用户那里恶意盗取

IOS开发中滑动页面时NSTimer停止的问题

我们在做倒计时的时候,发现当你手指按着屏幕不放,拖动tableView滑动的时候,写在cell上得倒计时停止倒计时,松开继续倒计时.研究发现就是拖动tableView滑动时,NSTimer停止了. 这其实就是runloop的mode在做怪.runloop可以理解为cocoa下的一种消息循环机制,用来处理各种消息事件,我们在开发 的时候并不需要手动去创建一个runloop,因为框架为我们创建了一个默认的runloop,通过[NSRunloop currentRunloop]我们可以得到一个当前线程

Android开发中使用数据库时出现java.lang.IllegalStateException: Cannot perform this operation because the connection pool has been closed.

最近在开发一个 App 的时候用到了数据库,可是在使用数据库的时候就出现了一些问题,在我查询表中的一些信息时出现了一下问题: Caused by: java.lang.IllegalStateException: Cannot perform this operation because the connection pool has been closed. at android.database.sqlite.SQLiteConnectionPool.throwIfClosedLocked(

关于iphone开发中的@property和@synthesize的一些见解(转)

我的体会是@property和@synthesize有以下两个作用: 1.作用一 @property是在头文件.h中声明一个变量的setter和getter方法. @synthesize是在m文件中定义setter和getter方法的实现. 2.作用二 @property,在声明变量方法的时候可以附加定义该变量的属性.如retain,assign,readonly,nonautomic等等. 但是,有一个点需要解释一下,就是直接使用 变量名赋值 和使用 self.变量 赋值的区别.比如 .h..

iOS开发中 实现登录时关于使用QQ做为第三方授权登录的问题

注意:QQ本身没有授权功能,所以想要使用QQ做第三方登录必须通过QQ空间来实现! 第一步:集成ShareSDK(步骤同集成分享的一样,如果已经集成过就不用再重新集成了),这里需要注意的是,由于是要通过QQ空间来实现授权登录,所以在下载ShareSDK包的时候别忘了勾选QQ空间,不然会报尚未导入平台(6)的错误. 第二步:打开工程中的*AppDelegate.m(*代表你的工程名字)?文件,导入QQSDK的头文件:            #import <TencentOpenAPI/QQApiI

iPhone开发中,在XCode下混合编译 C++/Objective-C

首先,最最最要紧的事情,不是代码而是编译器选项,在做混合编译之前一定要把编译器的Compile Sources As选项改为Objective C++. 默认的选项是According to file type,用这个的话,你后面每个不在交叉行列里的类都OK,一旦两种语言在一个文件中相互调用, 就会报错,而且报的错怪的很,比如:找不到new,找不到delete,等等.

【转】iphone开发中NSMutableAttributedString/NSAttributedString 富文本设置

http://stackoverflow.com/questions/11031623/how-can-i-use-attributedtext-in-uilabel 一.设置UILabel的属性attributedText(NSMutableAttributedString)NSString *testStr = @"测试";UILabel *testLab = ...(实例对象) NSMutableParagraphStyle *ps = [[NSMutableParagraphS

vue开发中,build时css打包报错

vue在打包的时候css报错 这个是因为我在多个页面引入了同一个css文件,webpack打包时候对css文件顺序报错,如果css少,可以稍微改动下css文件顺序即可,但是当很多文件引入的时候,就没法一个个改了,解决办法是在build的文件中加入