XCode 4.5、静态库和类别

3
我正在尝试使用一个静态库,其中的类别在运行时未被使用。没有编译时错误,但当我尝试运行时,会出现标准的“向实例发送无法识别的选择器”错误消息,并导致我的应用程序崩溃。
许多解决方案建议将-ObjC -all_load添加到应用程序目标的“其他链接器标志”属性中(还有许多其他人说,自XCode 4以来,这不再需要,这就是我为什么要包括XCode版本的唯一原因)。我已经尝试过了,但在构建过程中得到了115个错误: Undefined symbols for architecture i386: "_CLLocationCoordinate2DMake", referenced from: -[QMapElement init] in libQuickDialog.a(QMapElement.o) "_OBJC_CLASS_$_MKMapView", referenced from: objc-class-ref in libQuickDialog.a(QMapViewController.o) "_OBJC_CLASS_$_MKPinAnnotationView", referenced from: objc-class-ref in libQuickDialog.a(QMapViewController.o) "std::istream::gcount() const", referenced from: GT::AES::decode(std::istream&, std::ostream&, unsigned int&, bool) in GD(gtaes.o) GT::AES::encode(std::istream&, std::ostream&, unsigned int&, bool) in GD(gtaes.o) "std::string::find_first_of(char const*, unsigned long, unsigned long) const", referenced from: -[GDSetPasswordViewController checkPasswordStrength:] in GD(GDSetPasswordViewController.o) GD::EacpCReq::EacpCReq(std::string, std::string, GT::Dbb&) in GD(GDEacpCommands.o) GD::RawSocket::connect() in GD(GDRawSocket.o) "std::string::copy(char*, unsigned long, unsigned long) const", referenced from: GD::Socket::toString() const in GD(GDSocket.o) (等等,这是其中的5或6个)。
无论我是否有这些链接器标志,或者两者都有,我得到的是完全相同的错误集合。
不确定这是否是罪魁祸首,还是巧合,但更仔细地查看这些错误后,似乎它们全部来自于我正在使用的两个第三方库之一。一个作为已安装的.framework文件,另一个作为常规静态库。也许我需要对它们的构建进行一些处理(如果可能的话)?谢谢!

请参考此线程,该线程涉及类似问题,或许可以帮到您...http://stackoverflow.com/questions/13090156/xcode-compile-time-error-on-simultor/13090196#comment17839707_13090196 - Snips
1个回答

2

我认为这个错误信息指向了几个丢失的框架:

  1. CoreLocation (_CLLocationCoordinate2DMake 符号);

  2. MapKit (_OBJC_CLASS_$_MKPinAnnotationView 符号);

  3. C++ 标准库。

尝试将它们包含在你的目标中... 特别是对于 C++ 标准库,你应该在 Xcode 中的“Apple LLVM Compiler x.y - Language”下检查特定的构建设置。

当然,这并不排除其他可能的缺失框架...


那让我开始了,实际上,降到了112。现在只需要弄清楚这些东西在哪些其他框架中。感谢你指引我正确的方向。 - cscott530
是的,我只需要三个libstdc++库中的一个。每个都让我达到了0个错误,现在只需要从我的第三方框架提供商那里弄清楚使用哪一个更好。再次感谢! - cscott530

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接