zxing在xcode 4.5和ios 6中

你们很多人注意到了; zxing不能用最新的xcode(4.5 / ios 6)

这里是用例:

  1. 从中继结帐最新版本(因为一些修补程序已被添加)
  2. 使用ios 6.0在xcode 4.5中创build单一视图应用程序
  3. 使用README来添加依赖项,path等(只需按照步骤进行)
  4. 添加zxingcontroller调用类(重命名为毫米)

编译模拟器和设备都失败它显示31这样的错误:

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

所有31个错误都是相似的,区别在于符号名称

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

PS如果你有从以前的Xcode的应用程序,它的作品。 问题只有在Xcode 4.5中创build新的应用程序

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

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

原始的ScanTest(将ZXingWidget作为子项目构build)使用以下设置,如果按原样使用库,那么需要与您的App版本设置相匹配。

为了确保,我使用Xcode 4.5创build了一个全新的项目。 该项目使用ZXingWidget作为预build库,但不是作为一个子项目 – 我不喜欢子项目不是我自己的东西 – 虽然这个专业不会影响结果。

重要的设置是C ++标准库 – 确保对编译器默认设置

在这里输入图像说明


一点澄清

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


最后但并非最不重要的一点,请确保您的体系结构有效体系结构设置在所有项目和子项目(修复常见的armv7s链接器问题)上匹配。

首先,确保所有项目中的“ 架构”设置都设置为“ armv7 armv7s 。 然后,还可以编辑所有项目的有效架构 armv7s armv7的项目设置。

在这里输入图像说明

您可能还想切换“其他警告标志” – 错误closures。 似乎在Xcode版本> 4.5(LLVM编译器> 4.1)中是必需的。

它适用于我,是否在项目目标的“生成设置”选项卡中的“其他链接器标志”列表中启用了-lstdc ++? 这听起来好像不能识别zXing构build所需的c ++符号。 如果是这样,上述build议应该有所帮助。