我想做什么
在我的iPhone项目中集成二维码阅读器框架Zxing。我从这里检出了ZXing SDK。我运行了带有ZXing的示例项目ScanTest,没有任何问题。但是当我尝试将库与我的项目集成时,遇到了提到的错误。
项目规格
- 目标操作系统:iOS 6.0
- 部署目标:iOS 5.0或以上。
- 测试设备:iPhone 4和iPhone 3GS。
- Xcode:Xcode 4.5.1
- ZXing版本:2.0
问题
当我按照ZXing自述文件中的每个集成步骤构建时,我遇到了构建错误,例如
Undefined symbols for architecture armv7:
"std::basic_ostream<char, std::char_traits<char> >& std::operator<<<std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)", referenced from:
zxing::qrcode::Detector::computeDimension(zxing::Ref<zxing::ResultPoint>, zxing::Ref<zxing::ResultPoint>, zxing::Ref<zxing::ResultPoint>, float) in libZXingWidget.a(Detector-B8B28E953F840D47.o)
Undefined symbols for architecture armv7:
"std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&)", referenced from:
zxing::Exception::Exception(char const*) in libZXingWidget.a(Exception.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> > >
这样的错误有27个.. 我只复制了前两个。
我发现了什么
好吧,我阅读了stackoverflow上的这个,这个,这个,这个,这个,这个和这个线程,所有线程都出现了相同的错误信息。没有一个解决方案适用于我。
然后我在ZXing论坛中找到了这个已关闭的线程,讨论了相同的问题。根据那个讨论,有一些可能的解决方案(对某些人有效)
第一个错误(可能)是因为您没有将main.m重命名为main.mm。第二个错误(可能)是因为您没有链接widget库。
我也将我的main.m重命名,核对了是否添加了库,只发现我肯定有添加。所以这不是解决方案。
当我将库的架构更改为“标准(armv7,armv7s)”以匹配我的主项目后,我能够成功编译应用程序。
我的项目、目标、库项目(针对调试、分发、发布)的架构都给出了标准(armv7,armv7s)
。所以也没有运气。
然后他们关闭了这个问题,说:
ZXing项目已更新,添加了armv7s arch并删除了armv6 arch。这些更改是必需的:(1)为iPhone 5构建,它是armv7s,(2)为了构建,因为Xcode 4.5不包括对armv6的支持。如果您有自己的项目文件,您需要自己进行这些更改。这些是一般性的更改,而不是特定于zxing的更改,因此如果遇到问题,您可以在像StackOverflow这样的一般论坛中获得更多/更快的帮助。
所以,我在StackOverflow这里。
还有一点
在ZXing集成的README文件中,集成的第一步是:
1)在“
zxing / iphone / ZXingWidget / </