13

正如你们许多人所注意到的那样;zxing 在最新的 xcode (4.5/ios 6) 中不起作用

这是用例:

  1. 从主干结帐最新版本(因为已经添加了一些修复)
  2. 使用 ios 6.0 在 xcode 4.5 中创建单视图应用程序
  3. 使用 README 添加依赖项、路径等(只需一步一步)
  4. 将 zxingcontroller 调用添加到类(重命名为 mm)

模拟器和设备的编译都失败它显示 31 错误,如下所示:

Undefined symbols for architecture i386:
  "std::string::c_str() const", referenced from

所有 31 个错误都相似,不同之处在于符号名称

可能有人知道如何用这个用例解决它?

ps 如果您有以前 Xcode 的应用程序,它可以工作。问题仅在于您在 Xcode 4.5 中创建新应用程序

4

3 回答 3

32

您遇到的问题似乎与 C++ 标准库相关。

实际上,每当您看到与标准库对象(例如std::string)相关的链接器故障时,您应该检查所有链接库和应用程序项目本身的项目设置。他们通常需要匹配!

原始的 ScanTest(将 ZXingWidget 构建为子项目)使用以下设置,如果您按原样使用库,则这些设置需要与您的 App 构建设置相匹配。

为了确保这一点,我使用 Xcode 4.5 创建了一个全新的项目。该项目使用 ZXingWidget 作为预建库,但不作为子项目——我不喜欢不属于我自己的东西的子项目——尽管这个专业不会影响结果。

重要的设置是C++ 标准库- 确保设置为编译器默认值

在此处输入图像描述


一点澄清

实际上,你不需要使用C++ 标准库,你也可以使用支持 C++11 的 LLVM C++ 标准库但是您必须在与您的项目链接的所有项目、子项目和库中使用完全相同的库。因此,如果您坚持使用该库的更新版本(C++11 支持),那么您也必须使用这些设置构建 ZXing 库。


最后但同样重要的是,确保您的架构有效架构设置与所有项目和子项目匹配(修复常见的armv7s链接器问题)。

首先,确保在所有项目中都设置了架构设置。armv7 armv7s然后还将所有项目的项目设置编辑为Valid Architecture armv7s armv7

在此处输入图像描述

于 2012-10-01T00:00:44.377 回答
2

您可能还想关闭“其他警告标志”-Werror。在 Xcode 版本 > 4.5(LLVM 编译器 > 4.1)中似乎是必需的。

于 2012-11-05T10:56:56.070 回答
0

它对我有用,您是否在项目目标的“构建设置”选项卡中的“其他链接器标志”列表中启用了 -lstdc++?听起来它无法识别 zXing 构建所需的 c++ 符号。如果是这种情况,上述建议应该会有所帮助。

于 2012-09-30T23:32:43.303 回答