ошибки соединения iPhone SDK со статической библиотекой

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

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

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

Какие-либо идеи о том, где посмотреть?

9
задан swiftBoy 1 April 2016 в 19:56
поделиться

2 ответа

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

. Если вы углубитесь в свою цель, появится ли имя библиотеки в поле «Link binary» с группами библиотек?

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

6
ответ дан 4 December 2019 в 22:27
поделиться

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

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

0
ответ дан 4 December 2019 в 22:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: