【问题标题】:Undefined symbols while including Zxing to Xcode 4.3 + Obj-C包含 Zxing 到 Xcode 4.3 + Obj-C 的未定义符号
【发布时间】:2012-07-17 17:20:47
【问题描述】:

在将 ZXingWidget 包含到我之前的 iOS 项目中时,我遇到了一些问题。

这是我之前使用 XCode4.3+ARC for iOS 开始的一个项目。对于这个项目,我需要包括 ZXing 来扫描。

我已按照提供的自述文件进行操作。

  1. 复制zxing到项目根目录,添加ZXingWidget.xcodeproj项目
  2. 在构建阶段添加链接 libZXingWidget.a
  3. 将 ZXingWidget 添加到目标依赖项
  4. 标头搜索路径 - 递归 $(SRCROOT)/zxing-read-only/iphone/ZXingWidget/Classes
  5. 标头搜索路径 - 非递归 $(SRCROOT)/zxing-read-only/cpp/core/src
  6. 导入所有必需的 iOS 框架。

注意事项:

  • ZXing在iphone模拟器上编译运行正常
  • 我收到了大约 66 个关于未定义符号的错误。 (以下示例)
  • Zxing代码是从SVN获取的(我也试过zip下载,一样但是64错误)

但我无法直接从我的代码中导入任何文件 (#import 不起作用)。

我也试过这个solution,但没有运气。

我还缺少任何其他可能性吗?

感谢任何帮助!

我现在得到一些错误输出。

Undefined symbols for architecture i386:
"std::ios_base::Init::Init()", referenced from:
  ___cxx_global_var_init in libZXingWidget.a(Binarizer.o)
  ___cxx_global_var_init in libZXingWidget.a(BinaryBitmap.o)
  ___cxx_global_var_init in libZXingWidget.a(Array.o)
  ___cxx_global_var_init in libZXingWidget.a(BitArray.o)
  ___cxx_global_var_init in libZXingWidget.a(BitMatrix.o)
  ___cxx_global_var_init in libZXingWidget.a(BitSource.o)
  ___cxx_global_var_init in libZXingWidget.a(Counted.o)
  ...
"std::terminate()", referenced from:
  zxing::Binarizer::Binarizer(zxing::Ref<zxing::LuminanceSource>) in libZXingWidget.a(Binarizer.o)
  zxing::Binarizer::~Binarizer() in libZXingWidget.a(Binarizer.o)
  zxing::BinaryBitmap::BinaryBitmap(zxing::Ref<zxing::Binarizer>) in libZXingWidget.a(BinaryBitmap.o)
  zxing::BinaryBitmap::~BinaryBitmap() in libZXingWidget.a(BinaryBitmap.o)
  zxing::BinaryBitmap::getBlackRow(int, zxing::Ref<zxing::BitArray>) in libZXingWidget.a(BinaryBitmap.o)
  zxing::BinaryBitmap::getWidth() const in libZXingWidget.a(BinaryBitmap.o)
  zxing::BinaryBitmap::getHeight() const in libZXingWidget.a(BinaryBitmap.o)
  ...
"operator delete(void*)", referenced from:
  zxing::Binarizer::~Binarizer() in libZXingWidget.a(Binarizer.o)
  zxing::Counted::~Counted() in libZXingWidget.a(Binarizer.o)
  zxing::BinaryBitmap::~BinaryBitmap() in libZXingWidget.a(BinaryBitmap.o)
  zxing::BinaryBitmap::crop(int, int, int, int) in libZXingWidget.a(BinaryBitmap.o)
  zxing::BinaryBitmap::rotateCounterClockwise() in libZXingWidget.a(BinaryBitmap.o)
  zxing::Counted::~Counted() in libZXingWidget.a(BinaryBitmap.o)
  zxing::BitArray::~BitArray() in libZXingWidget.a(BitArray.o)
  ...
"___cxa_allocate_exception", referenced from:
  zxing::Counted::release() in libZXingWidget.a(Binarizer.o)
  zxing::Counted::release() in libZXingWidget.a(BinaryBitmap.o)
  zxing::BitArray::setRange(int, int) in libZXingWidget.a(BitArray.o)
  zxing::BitArray::isRange(unsigned long, unsigned long, bool) in libZXingWidget.a(BitArray.o)
  zxing::BitMatrix::setRegion(unsigned long, unsigned long, unsigned long, unsigned long) in libZXingWidget.a(BitMatrix.o)
  zxing::Counted::release() in libZXingWidget.a(BitMatrix.o)
  zxing::BitSource::readBits(int) in libZXingWidget.a(BitSource.o)
  ...

【问题讨论】:

  • 我的“Link Binary With Binaries”中的 libZXingWidget.a 是红色的。这是什么意思?
  • 我不注意颜色。我认为它应该代表指示的文件是否存在,但是对于链接的项目,它似乎不一致并且无关紧要。
  • @Orange 表示未找到或未正确链接。
  • 是的,我终于可以在我的应用程序中运行 ZxingWidgetController。一切似乎都很好。但是 libZXingWidget 的“Link Binary with Binaries”中的字段仍然是红色的。我的另一个 TapkuLibrary 是红色的,但现在是黑色的。

标签: objective-c ios xcode4.3 zxing


【解决方案1】:

您需要将main.m 重命名为main.mm。这将告诉 Xcode 链接必要的 C++ 库,而这是缺少的。

【讨论】:

  • 谢谢!现在可以了。但是我在我的另一个纯 obj-c 文件中发现编译器错误,该文件使用“命名空间”作为变量(这是 C++ 中的关键字)。这是正常的吗,还是我刚刚编辑错了。
  • 您不能在任何与 C++ 相关的内容中使用命名空间作为符号名称(变量或类型):.mm 文件或包含在 .h 文件中的 .h 文件(直接或不)。我强烈建议不要在您的 Objective C 中使用任何 C++ 保留字(命名空间、模板等)。
猜你喜欢
  • 1970-01-01
  • 2012-03-09
  • 2012-05-16
  • 2012-02-12
  • 2011-07-21
  • 1970-01-01
  • 2016-03-25
  • 2015-09-19
  • 1970-01-01
相关资源
最近更新 更多