XCode中的ZXing 4.6.2链接错误

时间:2014-03-20 21:23:28

标签: iphone xcode zxing

我试图对使用ZXing扫描条形码的现有iPhone应用程序进行一些小改动,我需要一些帮助。我整天都在搜索,试图解决这个问题,没有运气。

自从我们上次更新此应用以来,已经有很多次卫星(超过一年)。它是我们需要继续为一个客户服务的旧版本,但对于其他客户,我已经使用Xamarin创建了一个适用于Android和iOS的跨平台应用程序(和WP 8,尽管没有人还在使用那个)。因此,我们拥有的单个Mac用于创建应用程序,现在我们用来编译我们的Xamarin版本已经更新为使用XCode 4.6.2。

当我对代码进行更改并尝试重建时,我遇到了几个错误,我在SO上找到帮助后修复了这些错误。现在我收到一些错误,SO上的答案都无法解决。

以下是我遇到的错误:

Undefined symbols for architecture armv7:
  "zxing::common::StringUtils::SHIFT_JIS", referenced from:
      zxing::qrcode::DecodedBitStreamParser::decodeKanjiSegment(zxing::Ref<zxing::BitSource>, std::string&, int) in libZXingWidget.a(DecodedBitStreamParser-64E27B33E79CBC52.o)
  "zxing::common::StringUtils::GB2312", referenced from:
      zxing::qrcode::DecodedBitStreamParser::decodeHanziSegment(zxing::Ref<zxing::BitSource>, std::string&, int) in libZXingWidget.a(DecodedBitStreamParser-64E27B33E79CBC52.o)
  "zxing::common::StringUtils::ASCII", referenced from:
      zxing::qrcode::DecodedBitStreamParser::decodeNumericSegment(zxing::Ref<zxing::BitSource>, std::string&, int) in libZXingWidget.a(DecodedBitStreamParser-64E27B33E79CBC52.o)
      zxing::qrcode::DecodedBitStreamParser::decodeAlphanumericSegment(zxing::Ref<zxing::BitSource>, std::string&, int, bool) in libZXingWidget.a(DecodedBitStreamParser-64E27B33E79CBC52.o)
  "zxing::WhiteRectangleDetector::detect()", referenced from:
      zxing::datamatrix::Detector::detect() in libZXingWidget.a(Detector-9FC86B67C0CBCF52.o)
  "zxing::common::StringUtils::UTF8", referenced from:
      zxing::qrcode::DecodedBitStreamParser::append(std::string&, unsigned char const*, unsigned long, char const*) in libZXingWidget.a(DecodedBitStreamParser-64E27B33E79CBC52.o)
  "zxing::common::StringUtils::guessEncoding(unsigned char*, int, std::map<unsigned int, std::string, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, std::string> > > const&)", referenced from:
      zxing::qrcode::DecodedBitStreamParser::decodeByteSegment(zxing::Ref<zxing::BitSource>, std::string&, int, zxing::common::CharacterSetECI*, zxing::ArrayRef<zxing::ArrayRef<unsigned char> >&, std::map<unsigned int, std::string, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, std::string> > > const&) in libZXingWidget.a(DecodedBitStreamParser-64E27B33E79CBC52.o)

如您所见,错误都在zxing命名空间中。我可以加载ZXingWidget项目并构建它没有任何错误,但我的项目包括它不会链接到zxing核心的东西。我尝试过切换C ++编译器,标准库,语言方言等。

此时我将采取两种解决方案中的任何一种:

  1. 修复我的项目以便构建
  2. 从我的项目中删除ZXingWidget项目,并以某种方式将二进制文件作为依赖项拉入。我不是Objective-C或XCode开发人员,因此我不知道该怎么做。在Visual Studio世界中,而不是在我的解决方案中包含ZXingWidget项目并包含项目引用,我只是将DLL放在我的解决方案的文件夹中,并将其作为常规DLL引用包含在内。

1 个答案:

答案 0 :(得分:0)

我能够修复我的构建。 ZXingWidget项目引用cpp文件夹中的文件,该文件夹位于与我的主项目相同级别的文件夹中。这就是ZXing文档所说的那样(并且它在我升级XCode之前就已经开始工作了),尽管它对我来说没有任何意义。所以文件夹看起来像这样:

  • 基本文件夹
    • CPP
    • 我的项目
      • ZXingWidget

在项目中包含ZXingWidget的说明告诉您将../../cpp/core/src添加到搜索的标题中。链接器抱怨的文件都在那里,所以我手动将链接器所抱怨的每个文件添加到ZXingWidget项目目标中的编译源。

之后我只有一个链接器错误,我通过更改主项目上的部署目标并将其目标从3.0修改为5.1.1来修复(我会将其设置为4.3,但它表示armv64架构至少有5.1.1 - 不知道我是否需要这种架构,但无论如何。