我已经构建了自己的静态库,其中包含要在我的项目中重用的组件,最近需要更新一堆类。具体来说,由于某些类改变了名称,一些方法的签名发生了变化。
现在发生的事情是图书馆自己编译得很好,但是,当添加到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几次,但没有好处。
关于在哪里看的任何想法?
答案 0 :(得分:6)
您是否已将库添加为项目的依赖项?见Xcode 3.1.1 and static libraries
如果向下钻取目标,库名称是否出现在“链接二进制文件”中 与图书馆“小组?
查看编译器/链接器输出的日志。找到对链接器的调用。您的库是否出现在要链接的静态库列表中?
答案 1 :(得分:2)
是的,我解决了这个错误..非常感谢@Shaggy Frog
错误强>
我正在使用一些YouTube课程,它给我以下错误
<强>解决方案强>
我们需要在“Build Phases”选项中将Lib Classes添加到“Compiler Sources”。
转到Project的 Build Phases 并单击 Compiler Sources 选项(参见下面的屏幕)。
然后在此处添加课程
现在让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,您应该拖放库项目,然后转到目标设置,然后在链接框架和库的摘要选项卡中添加您的库并完成。
希望它会对某人有所帮助。