#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
в цель вашего приложения.