8

我有一个使用 zbar-sdk(条形码扫描库)的项目。

将我的机器更新到 xcode 4.5 和 ios6sdk 后,我遇到了一些麻烦。

我能够在不涉及我的项目的任何内容的情况下构建到模拟器。这是使用最新的 zbar 1.2 库。

然后我想构建到我的 ios6 设备进行测试,这就是我遇到错误的时候。

在 zbar 开发人员论坛上进行了一些谷歌搜索后,我发现我需要获取 zbar 源代码并为 armv7 和 armv7s 构建 libzbar.a,因为 zbar 开发人员尚未完成这项工作。

见 - http://sourceforge.net/projects/zbar/forums/forum/1072195/topic/5728912

所以我这样做了,将更新后的 libzbar.a 重新导入到我的项目中。然后我为我的设备构建,它工作!我能够将我的应用程序放到我的测试设备上,并且 zbar 条形码库运行良好。

我以为事情就这样结束了,可惜没有。

然后我尝试再次构建到模拟器(ios6),这就是它失败的时候。

无论如何,我都无法同时使用相同的设置为设备和模拟器构建这个项目:(

构建我自己的 libzbar.a 文件时我的 libzbar.a 项目设置:

架构:标准(armv7,armv7s)$(ARCHS_STANDARD_32_BIT)

仅构建活动架构:否

有效架构:armv7 armv7s

我的项目设置(对于myapp)为:

架构:标准(armv7,armv7s)$(ARCHS_STANDARD_32_BIT)

仅构建活动架构:否

有效架构:armv7 armv7s

基础 SDK:iOS6

iOS 部署目标:iOS 5.0

以及尝试构建到模拟器时的错误:

ld: warning: ignoring file /Users/blah/iOS App/myapp/ZBarSDK/libzbar.a, missing required architecture i386 in file /Users/blah/iOS App/myapp/ZBarSDK/libzbar.a (2 slices)
Undefined symbols for architecture i386:
  "_OBJC_CLASS_$_ZBarReaderViewController", referenced from:
      objc-class-ref in mycontroller.o
  "_ZBarReaderControllerResults", referenced from:
      -[mycontroller imagePickerController:didFinishPickingMediaWithInfo:] in mycontroller.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我曾尝试调整 libzbar.a 项目设置(例如,将活动架构设置为“YES”),但这只会导致模拟器或设备都无法工作。

它适用于设备但不适用于模拟器的事实让我觉得有一些奇怪的架构/项目设置导致了这种情况。

非常感谢任何帮助!

4

2 回答 2

2

我怀疑这是正确的答案,但它对我有用,我使用架构编译了新的 libzber.a:i386 armv6 armv7 armv7s,您还需要将有效架构指定为相同的值。再次,这对我有用的最近版本我需要尽快退出两者都可以在 Target -> Build Settings -> Architecures 中找到。

另请注意:$(ARCHS_STANDARD_32_BIT) 需要从设置中删除。

于 2012-09-25T01:27:16.553 回答
1

我通过在 Target->Build Settings 中的 OTHER_LDFLAGS 下设置 iOS6 模拟器架构解决了类似的问题。

我忘记了我对分离的架构有不同的命令行参数,所以我不得不手动声明模拟器

于 2012-10-16T07:57:25.913 回答