iPhone SDK链接错误与静态库

我已经构build了自己的静态库,其中有一些组件可以在我的项目中重用,最近还需要更新一些类。 具体来说,由于某些类改名,某些方法的签名被改变了。

现在发生的事情是,图书馆自己编译好了,但是,当添加到应用程序项目时,项目无法链接:

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** 

奇怪的是,经过很多项目清理(包括应用程序和lib项目)之后,我仍然遇到同样的问题。 即使开始一个新的项目,问题仍然存在。

我也仔细地重新启动Xcode之间的干净和build立几次,但没有好处。

任何想法在哪里看?

你有没有添加库作为依赖项目? 参见Xcode 3.1.1和静态库

如果深入了解目标,库名称是否显示在“带库二进制链接”组中?

查看编译器/链接器输出的日志。 find对链接器的调用。 您的图书馆是否出现在静态图书馆列表链接?

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

错误

我正在使用一些YouTube课程,并给我下面的错误

在这里输入图像说明

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

  1. 转到项目的构build阶段 ,然后单击编译器源选项(见下面的屏幕)。 在这里输入图像说明

  2. 然后在这里添加类

现在使项目清理和去build设。

希望能帮助到你 :)

我刚刚遇到相同的链接器错误。 我通过反复试验发现,那是因为我调用了isKindOfClass。 我不知道为什么这会导致链接器barf,但希望这些信息帮助。

有问题的类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; } 

我的解决方法是简单地省略确保“对象”是一个OrderItem的testing。 没有这个testing代码是不安全的,但链接错误消失了。 我很想知道如果我正在做这个testing错误,也许有一个更好的方法来做到这一点。

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

希望它能帮助别人。