ZBar:架构armv7的未定义符号

3

我正在iOS 8项目中使用zBar库,但我得到了这些编译器警告:

Undefined symbols for architecture armv7:
  "_iconv", referenced from:
      _qr_code_data_list_extract_text in libzbar.a(qrdectxt.o)
  "_iconv_open", referenced from:
      _qr_code_data_list_extract_text in libzbar.a(qrdectxt.o)
  "_iconv_close", referenced from:
      _qr_code_data_list_extract_text in libzbar.a(qrdectxt.o)
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我按照这个建议的顺序放置框架,并且是这样导入它们的:

enter image description here

我认为库libzbar.a是为armv6处理器创建的,而我针对iOS 8与armv7,所以会出现冲突。有没有一种方法可以解决这个问题,而不必更改我的项目架构目标?
3个回答

12
尝试在框架中添加libiconv.dylib。 我认为这不是armv7的问题。 添加缺少的框架后应该可以运行。

1
也许使用本地iOS条形码扫描器会是更好的选择?我在我的一个项目中也使用了ZBar,但在iOS 7之后,我开始使用本地扫描器,并变得非常满意 :)

http://www.infragistics.com/community/blogs/torrey-betts/archive/2013/10/10/scanning-barcodes-with-ios-7-objective-c.aspx

安装设置。
self.output = [[AVCaptureMetadataOutput alloc] init];
dispatch_queue_t metadataQueue = dispatch_queue_create("com.youproject.capturebarcode", 0);

[self.output setMetadataObjectsDelegate:self queue:metadataQueue];
if ([self.session canAddOutput:self.output]) {
    [self.session addOutput:self.output];
}

处理委托代码

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection
{
    [metadataObjects enumerateObjectsUsingBlock:^(AVMetadataObject *obj, NSUInteger idx, BOOL *stop) {
     if ([obj isKindOfClass:[AVMetadataMachineReadableCodeObject class]]) {
         AVMetadataMachineReadableCodeObject *code = (AVMetadataMachineReadableCodeObject *) [self.layer transformedMetadataObjectForMetadataObject:obj];
         if ([self.delegate respondsToSelector:@selector(barcodeReader:didReadBarcode:)]) {
             [self.delegate barcodeReader:self didReadBarcode:code.stringValue];
             self.delegate = nil;
         }
     }
    }];
}

0

是的,你说得对,“库libzbar.a是为armv6架构创建的”,而不是为armv7。

如果您正在尝试为armv7架构提供支持,则需要为armv7架构构建库,这只能由库的开发人员完成(因为需要源代码来构建静态库)。

基本上,使用i386(模拟器)和armv7(任何所需的架构)的静态库创建一个fat(静态库)文件,并将其与静态库的SDK一起提供,该SDK可在模拟器和设备上运行。

通过在各个架构的静态库上执行lipo命令来创建fat文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接