我想做的是
在我的中兴项目中集成iPhone、QR代码读取器框架。我从ZXing查看了这里的sdk。我运行了ZXing (名为ScanTest )的示例项目,没有任何问题。但是,当我试图将库集成到我的项目中时,我会看到提到的错误。
项目规格
问题
在完成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个这样的错误。我只抄了前两本。
我发现了什么
嗯,我在堆栈溢出中浏览了这、这、这、这、这、这、这线程,所有这些都带有相同的错误消息。所有的解决方案对我都没有用。
然后,我发现这个闭合的线程在ZXing论坛上讨论同样的问题。从那次讨论中,可以找到一些可能的解决方案(对一些人有效)。
第一个错误是(可能),因为您还没有将main.m重命名为main.mm。第二个错误是(可能),因为您没有针对小部件库进行链接
我也重新命名了我的主.m,交叉检查我是否增加了图书馆,结果发现我确实有。所以情况并非如此。
在我将库的架构更改为“标准(armv7,armv7s)”以匹配我的主要项目之后,我成功地编译了这个应用程序。
我的项目、目标、库项目(用于调试、分发、发布)体系结构给出为Standard (armv7, armv7s)
.所以那里也没有运气。
然后他们结束了这个问题,
zxing项目已经更新,以添加armv7s arch和删除armv6 arch。这些更改需要(1)为iPhone 5(即armv7s )构建,(2)根本无需构建,因为Xcode 4.5不包括对armv6的支持。如果您有自己的项目文件,则需要自己进行这些更改。这些都是一般性的变化,而不是特定于zxing,所以如果您有麻烦,您可以在一个像StackOverflow这样的通用论坛上获得更多/更快的帮助。
所以我在这里,在StackOverflow。
再来一点
在ZXing integration 自述文件中,集成的第一步是,
1)在"
zxing/iphone/ZXingWidget/
".下找到"ZXingWidget.xcodeproj“文件拖动ZXingWidget.xcodeproj并将其拖放到Xcode项目的“组和文件”侧边栏的根目录中。在单击"Add“之前,将出现一个对话框--确保未选中”复制项“,并且”引用类型“为”相对于项目“。或者,您可以右键单击项目导航器,并选择“向”“MyProject”添加文件。
当我将ZXingWidget.xcodeproj文件拖到我的项目中时,没有对话框。项目直接添加到项目中,我无法设置“复制项”和“引用类型”属性。我不知道它是Xcode 4.5的一个新特性还是一个bug。这是我无法按照自述文件正确执行的唯一步骤。
好吧,你有我所有的信息。我已经试着修了六个小时了。有什么想法吗?
发布于 2012-10-19 08:20:24
我终于让它起作用了..。对于将来遇到这件事的人..。
NO
。在我的例子中,这个字段已经是NO
这些东西帮我解决了这个问题。
更新
2013年12月,谷歌已退出ZXing iOS/Objective C端口。因此,iOS的for项目不再为新的iOS版本进行维护和更新。而且,Zxing不支持Arm64体系结构,这是新的XCode版本的标准体系结构之一。
因此,鼓励开发人员转到从原生Apple框架读取条形码开始就可以使用的iOS7。有关一步一步的教程,请参见这。
发布于 2012-12-07 00:15:47
我遵循了上述所有建议,虽然所有的内容都编译得很好,但是链接失败了:
"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)
zxing::GridSampler::checkAndNudgePoints(zxing::Ref<zxing::BitMatrix>, std::vector<float, std::allocator<float> >&) in libZXingWidget.a(GridSampler.o)
zxing::qrcode::DecodedBitStreamParser::decodeNumericSegment(zxing::Ref<zxing::BitSource>, std::string&, int) in libZXingWidget.a(DecodedBitStreamParser-64E27B33E79CBC52.o)
zxing::qrcode::Mode::forBits(int) in libZXingWidget.a(Mode.o)
..。"std::ios_base::Init::Init()",引用自:
___cxx_global_var_init in libZXingWidget.a(QRCodeReader-F470BE6889D3F76D.o)
___cxx_global_var_init in libZXingWidget.a(Decoder-3DF771F40A970F8E.o)
___cxx_global_var_init in libZXingWidget.a(FormatReader.o)
___cxx_global_var_init in libZXingWidget.a(QRCodeReader-C190599C861BFE46.o)
___cxx_global_var_init in libZXingWidget.a(DecodeHints.o)
___cxx_global_var_init in libZXingWidget.a(BinaryBitmap.o)
___cxx_global_var_init in libZXingWidget.a(DecoderResult.o)
等等..。
我正在运行Xcode 4.5.2。我已经将main.m重命名为main.mm,我的视图控制器也从.m重命名为.mm,任何地方的架构都是"armv7 armv7s“。
叹息..。
更新
苹果论坛上的某个人对我的问题有了答案:
看起来您的C++标准库不匹配。您的项目的构建设置使用的是clang的C++标准库,但是libZXingWidget.a被编译为使用C++标准库。 尝试如下:打开ZXingWidget.xcodeproj并将"C++标准库“设置为"libc++",然后清除所有内容并重新构建。 如果这不起作用,请尝试在项目和C++中将“libstdc++标准库”设置为"libstdc++“
第一个建议起了作用。
发布于 2012-12-27 17:21:22
我通过在拖放到xcode中的项目中更改一个值来解决这个问题。
集合:
只构建活动体系结构->调试-> No
希望能帮助人们:)!
https://stackoverflow.com/questions/12968369
复制相似问题