iPhone SDK将错误与静态库链接起来

时间:2010-05-28 18:12:25

标签: ios iphone xcode static-libraries

我已经构建了自己的静态库,其中包含要在我的项目中重用的组件,最近需要更新一堆类。具体来说,由于某些类改变了名称,一些方法的签名发生了变化。

现在发生的事情是图书馆自己编译得很好,但是,当添加到app项目时,项目无法链接:

Ld build/Sucursales.build/Debug-iphoneos/Sucursales.build/Objects-normal/armv6/Sucursales normal armv6
cd /Users/nameghino/src/Sucursales
setenv IPHONEOS_DEPLOYMENT_TARGET 3.1
setenv PATH "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 -arch armv6 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.2.sdk -L/Users/nameghino/src/Sucursales/build/Debug-iphoneos -L/Users/nameghino/src/Sucursales/../../Library/MyLibraries/MSSharedLibrary-1.0.0 -F/Users/nameghino/src/Sucursales/build/Debug-iphoneos -filelist /Users/nameghino/src/Sucursales/build/Sucursales.build/Debug-iphoneos/Sucursales.build/Objects-normal/armv6/Sucursales.LinkFileList -dead_strip -lxml2 -ObjC -all_load -miphoneos-version-min=3.1 -framework Foundation -framework UIKit -framework CoreGraphics -lsqlite3.0 -framework CoreLocation -framework MapKit -lxml2 /Users/nameghino/src/MSSharedComponents/Frameworks/MSSharedLibrary/build/Debug-iphoneos/libMSSharedLibrary.a -o /Users/nameghino/src/Sucursales/build/Sucursales.build/Debug-iphoneos/Sucursales.build/Objects-normal/armv6/Sucursales

Undefined symbols:
  "_OBJC_CLASS_$_DataCatalogService_GetSingleRow", referenced from:
      objc-class-ref-to-DataCatalogService_GetSingleRow in libMSSharedLibrary.a(MSDataCatalogSpecification.o)
  **"_OBJC_CLASS_$_DataCatalogService_ArrayOfString", referenced from:
      objc-class-ref-to-DataCatalogService_ArrayOfString in libMSSharedLibrary.a(MSDataCatalogSpecification.o)
  "_OBJC_CLASS_$_DataCatalogService_GetSingleRowResponse", referenced from:
      objc-class-ref-to-DataCatalogService_GetSingleRowResponse in libMSSharedLibrary.a(MSSingleRowResultsParser.o)
  "_OBJC_CLASS_$_DataCatalogService_GetMultiRowResponse", referenced from:
      objc-class-ref-to-DataCatalogService_GetMultiRowResponse in libMSSharedLibrary.a(MSMultiRowResultsParser.o)
  "_OBJC_CLASS_$_DataCatalogService_GetMultiRow", referenced from:
      objc-class-ref-to-DataCatalogService_GetMultiRow in libMSSharedLibrary.a(MSDataCatalogSpecification.o)
  "_OBJC_CLASS_$_DataCatalogService_HelloWorldResponse", referenced from:
      objc-class-ref-to-DataCatalogService_HelloWorldResponse in libMSSharedLibrary.a(DataCatalogService.o)
ld: symbol(s) not found
collect2: ld returned 1 exit status**

奇怪的是,经过大量项目清理(在app和lib项目中),我仍然遇到同样的问题。即使在开始一个新项目之后,问题仍然存在。

我还注意在干净和构建之间重新启动Xcode几次,但没有好处。

关于在哪里看的任何想法?

4 个答案:

答案 0 :(得分:6)

您是否已将库添加为项目的依赖项?见Xcode 3.1.1 and static libraries

如果向下钻取目标,库名称是否出现在“链接二进制文件”中 与图书馆“小组?

查看编译器/链接器输出的日志。找到对链接器的调用。您的库是否出现在要链接的静态库列表中?

答案 1 :(得分:2)

是的,我解决了这个错误..非常感谢@Shaggy Frog

错误

我正在使用一些YouTube课程,它给我以下错误

enter image description here

<强>解决方案

我们需要在“Build Phases”选项中将Lib Classes添加到“Compiler Sources”。

  1. 转到Project的 Build Phases 并单击 Compiler Sources 选项(参见下面的屏幕)。 enter image description here

  2. 然后在此处添加课程

  3. 现在让Project Clean和Go for Build。

    希望有所帮助:)

答案 2 :(得分:0)

我刚遇到相同的链接器错误。我通过反复试验发现,这是因为我正在调用isKindOfClass。我不确定为什么这会导致链接器停止,但希望这些信息可以解决问题。

有问题的类OrderItem是NSManagedObject的子代;换句话说,它是一个自动生成的核心数据实体类。

具体来说,这是链接器错误:

"_OBJC_CLASS_$_OrderItem", referenced from:
objc-class-ref-to-OrderItem in libmyStaticLib.a(MyTableViewController.o)
ld: symbol(s) not found
collect2: ld returned 1 exit status

这是令人讨厌的代码:

- (void)handleButtonTapWithObject:(id)object
{
    // This must be an OrderItem or else we don't want to touch it:
    if ( NO == [object isKindOfClass:[OrderItem class]] ) // <-- OFFENDING CODE
    {
        NSLog(@"Object parameter is of unexpected type.");
        return;
    }

我的解决方法只是省略确保'object'是OrderItem的测试。没有这个测试,代码就不那么安全,但链接器错误消失了。我很想知道我是否对这个测试做错了,也许还有更好的方法。

答案 3 :(得分:0)

我刚刚发现如果您使用xcode 4,您应该拖放库项目,然后转到目标设置,然后在链接框架和库的摘要选项卡中添加您的库并完成。

希望它会对某人有所帮助。