iPhone SDK связывает ошибки со статической библиотекой - PullRequest
9 голосов
/ 28 мая 2010

Я создал свою собственную статическую библиотеку с компонентами, которые будут повторно использоваться в моем проекте, и недавно мне пришлось обновить группу классов. В частности, подписи некоторых методов были изменены из-за того, что некоторые классы изменили имена.

Что происходит сейчас, так это то, что библиотека сама прекрасно компилируется, но при добавлении в проект приложения не удается связать проект:

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 между чистой и сборкой, но безрезультатно.

Есть идеи, где искать?

Ответы [ 4 ]

6 голосов
/ 29 мая 2010

Вы добавили библиотеку в качестве зависимости к проекту? См. Xcode 3.1.1 и статические библиотеки

Если вы углубитесь в свою цель, появится ли имя библиотеки в «Бинарном файле ссылки» с библиотеками "группа?

Посмотрите в журнале вывод компилятора / компоновщика. Найти звонок на компоновщик. Ваша библиотека появляется в списке статических библиотек для ссылки?

2 голосов
/ 05 сентября 2012

Да, я решил эту ошибку .. Большое спасибо @Shaggy Frog

Error

Я использовал некоторые классы YouTube, и это дает мне ошибку ниже

enter image description here

Решение

Нам нужно добавить классы Lib в «Источники компилятора» в опции «Фазы сборки».

  1. Перейдите в Project's Phases проекта и нажмите Исходники компилятора (см. Ниже). enter image description here

  2. Затем добавьте сюда классы

теперь сделайте Project Clean и Go for Build.

Надеюсь, это поможет:)

0 голосов
/ 17 февраля 2012

Я только что обнаружил, что если вы используете xcode 4, вы должны перетащить проект библиотеки, затем перейти к настройкам цели, затем на вкладке сводки в связанных платформах и библиотеках добавить вашу библиотеку и готово.

Надеюсь, это кому-нибудь поможет.

0 голосов
/ 25 августа 2010

Я только что столкнулся с той же ошибкой компоновщика. Методом проб и ошибок я обнаружил, что это потому, что я вызывал isKindOfClass. Я не уверен, почему это вызывает компоновщик для barf, но, надеюсь, эта информация поможет.

Рассматриваемый класс OrderItem является дочерним по отношению к NSManagedObject; другими словами, это автоматически сгенерированный класс сущности Core Data.

В частности, здесь была ошибка компоновщика:

"_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. Код не так безопасен без этого теста, но ошибка компоновщика исчезла. Мне было бы любопытно узнать, правильно ли я делаю этот тест, и, возможно, есть лучший способ сделать это.

...