【问题标题】:Linker Error in Xcode 5 for libzbar.aXcode 5 中用于 libzbar.a 的链接器错误
【发布时间】:2013-09-15 10:12:38
【问题描述】:

在我将 ZBar Sdk 集成到我的项目后,我的 xcode 5-DP 开始显示以下警告:

"ld: 警告: 为 iOS 模拟器链接 ObjC,但目标文件 (/Documents/Projects/Project/Utility/ZBarSDK/libzbar.a(ZBarReaderViewController.o)) 是为 MacOSX 编译的 "

【问题讨论】:

  • 选择“项目文件”并转到“构建阶段”-> 选择“编译源”然后检查 ZBarReaderViewController.m 是否存在?如果没有,则表示按 + 号并添加文件
  • @Spynet 你能简单解释一下吗?
  • @Spynet ,谢谢您的回复。但是当我使用 Zbar Sdk 时,没有可用的 .m 文件。
  • 选择“项目文件”并转到“构建阶段” --> 选择“链接的二进制文件”然后检查 libzbar.a 是否可用?
  • @PanktiPatel 您应该将 mario 的答案标记为正确。

标签: ios iphone ios7 xcode5 zbar-sdk


【解决方案1】:

构建 ZBar 库

以前我在 ZBar 上遇到了一个不同的问题,并在这里找到了一组有用的说明:https://web.archive.org/web/20170128181158/http://www.federicocappelli.net/2012/10/05/zbar-library-for-iphone-5-armv7s/

基本上,这些说明告诉您如何使用 Mercurial 签出源代码,然后编译您自己的 libzbar.a 文件。这应该可以解决您的问题。

事实上,就在昨晚,我最终不得不再次按照说明进行操作,因为我的 ZBar 版本在更新到 Xcode 5 后无法运行。我鼓励您点击上面的链接,但我会大部分都在这里,以及我为新 iPhone 平台添加的一些步骤。

Download 并安装 Mercurial for Mac。我为 OS X 10.8 拿了最新的一个。 (当你启动安装程序时,安装屏幕似乎仍然显示 10.7,所以不要感到惊讶。)

安装 Mercurial 后,使用以下命令下载 ZBar 的源代码:

    hg clone http://zbar.hg.sourceforge.net:8000/hgroot/zbar/zbar 
    cd zbar 
    hg checkout iPhoneSDK-1.3.1 
    open iphone/zbar.xcodeproj 

在 Xcode 的菜单中,选择“Product > Scheme > libzbar”,然后选择“Product > Scheme > Edit Scheme...”。 (您会收到一条警报,告诉您项目已更新为使用 LLBD 调试器。耶!)

在构建配置中选择“运行”并单击“确定”。

接下来,我们将为设备和模拟器编译 libzbar。在 Project and Targets 列表中,选择 libzbar 目标并单击 Build Settings 选项卡。验证您的架构设置,如屏幕截图所示。 (确保它显示 iOS 和 arm64 armv7 armv7s。)

另外,不要忘记将架构更改为标准架构(armv7、armv7s、arm64),否则您的项目将无法使用 arm64 进行编译。 (这在屏幕截图上没有正确显示)

现在,这是我昨晚发现的部分。我的部署目标设置为 iOS 3.1。如果您尝试在 Xcode 5 中使用该设置进行编译,您将收到错误消息。我将其更改为 iOS 7.0。

验证您的设置并根据需要更改任何设置后,运行 Build。返回“产品 > 方案 > 编辑方案...”并检查“目标”下拉菜单。 (见上面的截图。)我的 iPhone Retina(3.5 英寸)。将其更改为 iOS 设备并再次运行 Build。您现在已经构建了两次库:一次用于模拟器,一次用于设备。您需要合并这两个库。转到终端中的以下目录:

    cd ~/Library/Developer/Xcode/DerivedData

其中有一堆隐秘命名的目录,其中一个将以“zbar”开头。这是我的完整路径,例如:

    /Users/mario/Library/Developer/Xcode/DerivedData/zbar-dwpkaidpztsnjafveraeowkkjvdo

进入那个 zbar 目录,然后切换到 Build/Products 目录。

    cd Build
    cd Products

在那里你会看到两个文件夹:Release-iphoneos 和 Release-iphonesimulator。 (每个里面都有一个 lizbar.a 文件。)将它们与以下命令结合起来:

    lipo -create Release-iphoneos/libzbar.a Release-iphonesimulator/libzbar.a -o libzbar.a 

您现在已经创建了一个应该使用的通用库 (libzbar.a),替换了 ZBar 发行版附带的那个。它位于相同的 Build/Product 目录中。

正如我所说,我很大程度上抄录了上面链接的作者 Cappelli 先生的说明,并将它们更新为最新的 Xcode。

【讨论】:

  • 精彩的文章。谢谢!
  • 选择 iOS 6 作为部署目标会改变什么吗?我不确定这是否意味着我需要 iOS7 SDK 来构建它,或者我只能在 iOS7 设备中使用它。
  • 伟大的工作压缩东西......让我紧张的一件事是从最新版本编译这个库......我不认为我是最新的所以我不得不经历一些事情并更新除了换出编译的库之外,我的项目中的头文件。
  • 我必须确保在我的项目中也使用更新后的头文件。这是一个很好的观点。
  • 你真的救了我.. :P
【解决方案2】:

自 2014 年 12 月以来,有一个比马里奥的答案更简单的解决方案。使用 CocoaPods 并将这一行添加到您的 Podfile 中:

pod 'ZBarSDK', '~> 1.3.1'

然后,运行经典的pod install。它将构建良好,包括 arm64。

【讨论】:

    【解决方案3】:

    我通过将“仅构建活动架构”更改为“是”来避开错误,不仅用于调试,也用于发布... 至少现在,这救了我。

    【讨论】:

      【解决方案4】:

      ZBarSDK-1.3.1 BETA 无需重建即可修复问题。

      只需下载 ZBarSDK-1.3.1.dmg 镜像,从您的项目中删除 ZBarSDK 文件夹,并将其替换为最后一个: http://sourceforge.net/projects/zbar/files/iPhoneSDK/beta/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-03
        • 1970-01-01
        • 2013-09-29
        • 2013-11-16
        • 1970-01-01
        • 2013-12-30
        • 2010-11-25
        • 1970-01-01
        相关资源
        最近更新 更多