Использование статической библиотеки

#ios #xcode #static-linking #objective-c

#iOS #xcode #статическое связывание #objective-c

Вопрос:

У меня есть статическая библиотека, внутри которой есть другая статическая библиотека.
Давайте назовем их libA и libB.
libA — это библиотека, обращенная вовне, или, другими словами, libA вызывает libB внутренне, а libB не имеет обращенных вовне вызовов функций.
Заголовок libA является внешним C, чтобы имена не искажались.
Я протестировал эту библиотеку с помощью Swift, и она работает безупречно.
Однако, когда я пытаюсь использовать ее внутри проекта Obj-C, я получаю следующие ошибки :

  "_OBJC_CLASS_$_UIResponder", referenced from:


  _OBJC_CLASS_$_AppDelegate in AppDelegate.o


  "_OBJC_CLASS_$_UIViewController", referenced from:


  _OBJC_CLASS_$_ViewController in ViewController.o


 "_OBJC_METACLASS_$_UIResponder", referenced from:


 _OBJC_METACLASS_$_AppDelegate in AppDelegate.o


"_OBJC_METACLASS_$_UIViewController", referenced from:


 _OBJC_METACLASS_$_ViewController in ViewController.o


 "_UIApplicationMain", referenced from:


 _main in main.o


 ld: symbol(s) not found for architecture x86_64


 clang: error: linker command failed with exit code 1 (use -v to see invocation)
  

Я убедился, что и libA, и libB созданы для архитектуры x86_64.
Любая помощь очень ценится.

Редактировать: я смог решить эту проблему. На этапах сборки мне пришлось добавить UIKit.framework в двоичный файл Link с библиотеками. Это исправило ошибки и позволило мне использовать мою библиотеку. Спасибо за помощь!

Комментарии:

1. Символы, на которые он жалуется, взяты из UIKit. Я предполагаю, что это связано с вашим реальным приложением, а не с вашими библиотеками.

2. Удалите производные данные из ~/Library /Developer/Xcode/DerivedData /, а затем очистите и создайте заново. Надеюсь, это сработает.

3. Похоже, что UIKit не связан в проекте. Убедитесь, что она связана в большем проекте, или удалите зависимости из связанной библиотеки. Я настоятельно рекомендую перейти на динамические фреймворки.

4. Я попытался удалить папку DerivedData, и это, к сожалению, не исправило ситуацию. Я закомментировал все, что ссылается на мою библиотеку, и ошибки все еще там, поэтому кажется, что это проблема. Есть идеи о том, как это исправить?

5. Если ваша библиотека статически связана и имеет внутренний доступ к UIResponder или UIViewController , компоновщик завершится с ошибкой. Добавьте UIKit.framework в цель вашего приложения.

Ответ №1:

Добавьте UIKit.framework в цель вашего приложения.