Kri*_*dra 37 cocoa-touch undefined-symbol zxing ios ios6
在我的iPhone项目中集成Zxing,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> > >
Run Code Online (Sandbox Code Playgroud)
这样有27个错误..我只复制了前两个.
好吧,我经历了这个,这个,这个,这个,这个,这个,这个线程计算器,都具有相同的错误消息.这些解决方案都不适合我.
然后我在ZXing论坛中发现这个封闭的线程讨论同样的问题.从讨论中,一些可能的解决方案(为某些人工作)
第一个错误(可能)是因为您没有将main.m重命名为main.mm. 第二个错误(可能)是因为您没有链接到窗口小部件库
我也重命名了我的main.m,交叉检查我是否添加了库只是为了找到我肯定有的.所以事实并非如此.
在我将库的体系结构更改为"标准(armv7,armv7s)"以匹配我的主项目后,我能够成功编译应用程序.
我的项目,目标,库项目(用于调试,分发,发布)体系结构如下所示Standard (armv7, armv7s)
.那里也没有运气.
然后他们关闭了这个问题说,
zxing项目已更新,以添加armv7s拱并移除armv6拱.这些变化需要(1)为iPhone 5构建armv7s和(2)构建,因为Xcode 4.5不包括对armv6的支持.如果您有自己的项目文件,则需要自己进行这些更改.这些是zxing特有的一般性更改,因此如果您遇到问题,可以在StackOverflow等常规论坛中获得更多/更快的帮助.
所以我在StackOverflow中.
在ZXing集成README文件中,集成的第一步是,
1)找到""下的"ZXingWidget.xcodeproj"文件
zxing/iphone/ZXingWidget/
.拖动ZXingWidget.xcodeproj并将其拖放到Xcode项目的"Groups and Files"侧栏的根目录中.将出现一个对话框 - 确保未选中"复制项目",并在单击"添加"之前将"参考类型"设置为"相对于项目".或者,您可以右键单击项目导航器,然后选择"将文件添加到"MyProject"'.
当我将ZXingWidget.xcodeproj文件拖到我的项目时,没有对话框.项目直接添加到项目中,我无法设置"复制项目"和"参考类型"属性.我不知道这是xcode 4.5或bug的新功能.根据README文件,这是我无法正确遵循的唯一步骤.
好吧,你掌握了我的所有信息.我试图解决这个问题6个小时.任何的想法?
Kri*_*dra 57
好吧,最后我得到了它的工作..对于任何在未来遇到这个的人..
将main.m文件重命名为main.mm.
ZXing的README说明了我们为什么需要这个
当尝试使用ZXingWidgetController构建自己的项目时,会发生链接器错误,例如"未定义引用".如果此错误看起来像c ++未定义的引用,那么将main.m重命名为main.mm(Objective-C++源后缀)可能会解决问题
重命名使用ZXing libray函数的文件(ViewController/View),使其也具有.mm扩展名.
检查整个项目的架构设置.给 建筑和有效的架构为ARMv7的armv7s在您的项目设置,目标设置,以及斑马线项目(您添加到您的主项目)和目标设置.
在主项目 - > 构建设置中滚动并找出选项,C++语言方言和C++标准库.为它们选择"编译器默认值"选项.(这是我错过的步骤,因为最新的XCode模板的编译器默认设置与旧版本不同,所以需要它.
您还可能必须将ZXingWidget的" 仅构建有效体系结构 "标志设置为NO
.就我而言,这个领域已经存在NO
这些解决了我的问题..
因此,鼓励开发人员转移到本机Apple框架以读取从iOS7开始提供的条形码.请参阅此步骤以获取分步教程.
Pat*_*son 10
我已经按照上面的所有建议,虽然一切都很好,但链接失败了:
"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)
Run Code Online (Sandbox Code Playgroud)
..."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)
Run Code Online (Sandbox Code Playgroud)
等等...
我正在运行Xcode 4.5.2.我已经将main.m重命名为main.mm,我的视图控制器也从.m重命名为.mm,架构到处都是"armv7 armv7s".
叹...
更新
Apple devforums上有人解决了我的问题:
看起来你有不匹配的C++标准库.您的项目的构建设置使用clang的C++标准库,但libZXingWidget.a被编译为使用GNU C++标准库.
试试这个:打开ZXingWidget.xcodeproj并将"C++标准库"设置为"libc ++",然后清理所有内容并重建.
如果这不起作用,请尝试在项目和ZXingWidget.xcodeproj中将"C++标准库"设置为"libstdc ++"
第一个建议就是诀窍.
归档时间: |
|
查看次数: |
27899 次 |
最近记录: |