2015-03-30 4 views
1

Я использую библиотеку Zbar над проектом IOS 8 и я получаю эти предупреждения компилятора:Zbar: неопределенные символы для архитектуры ARMv7

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) 

Я последовал this suggestion положив рамки для того, и это, как я импортировать их :

enter image description here

Я предполагаю, что библиотека libzbar.a была создана для ARMv6 процессоров и как я нацеливание IOS 8 с ARMv7 он конфликтует. Есть ли способ разрешить это без меня, меняя цели моей архитектуры проекта?

ответ

10

Попробуйте добавить libiconv.dylib в рамки. Я не думаю, что это проблема armv7. Он должен запускаться после добавления отсутствующей рамки.

+0

это решило проблему, спасибо – mm24

0

Да, вы правы, библиотека libzbar.a была создана для архитектуры armv6, а не для armv7.

Если вы пытаетесь предоставить поддержку для архитектуры armv7, тогда в этом случае вам нужно построить библиотеку для архитектуры armv7, и ее может сделать только разработчик библиотеки (поскольку источник необходим для создания статической библиотеки).

В основном файл с жиром (статическая библиотека) создается с использованием статических библиотек для i386 (симулятор) и armv7 (любые требуемые архитектуры) и поставляется с SDK статической библиотеки, которая работает как на симуляторе, так и на устройстве.

Жировой файл создается путем выполнения команды lipo для отдельных статических библиотек архитектуры.

1

Может быть, с помощью сканера штрих-кода iOS можно выбрать лучший вариант? Я также использую Zbar в одном из моих проектов, но после того, как прошивка 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; 
     } 
    } 
    }]; 
}