XCode 4.5,静态库和类别

时间:2012-11-05 14:49:26

标签: objective-c ios xcode

我正在尝试使用静态库,并且其中的类别未在运行时使用。没有编译时错误,但是当我去运行时,我得到标准的“无法识别的选择器发送到实例”消息,我的应用程序崩溃。

许多解决方案都说要将-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)

(等等,这大约是115中的5或6)。

无论我有这些链接器标志,还是两者都有,我得到完全相同的错误集。

不确定这是否是罪魁祸首,或者只是巧合,但在仔细查看错误后,似乎它们都来自我正在使用的两个第三方库之一。一个作为已安装的.framework,另一个作为常规静态库。也许我需要对他们的构建做一些事情(如果可能的话)? 谢谢!

1 个答案:

答案 0 :(得分:2)

在我看来,错误消息指向一些缺少的框架:

  1. CoreLocation(_CLLocationCoordinate2DMake符号);

  2. MapKit(_OBJC_CLASS_$_MKPinAnnotationView符号);

  3. C ++标准库。

  4. 尝试将它们包含在目标中...具体来说,对于C ++标准库,您应该在“Apple LLVM编译器x.y - 语言”下检查Xcode中的特定构建设置。

    这不排除其他遗漏框架的可能性,当然......