#ios #objective-c #xcode
#iOS #objective-c #xcode
Вопрос:
Я пытаюсь добавить пользовательский фреймворк в 2 проекта, но произошла ошибка.
duplicate symbol _OBJC_CLASS_$_ApiECV in:
/Users/kevinmachado/Library/Developer/Xcode/DerivedData/EnvDevTestiPad-bvscnxvnzjltpxcxuoomuaqqsxpj/Build/Products/Debug-iphonesimulator/libAPI_ECV.a(ApiECV.o)
/Users/kevinmachado/Library/Developer/Xcode/DerivedData/EnvDevTestiPad-bvscnxvnzjltpxcxuoomuaqqsxpj/Build/Products/Debug-iphonesimulator/libMKCalendar.a(ApiECV.o)
duplicate symbol _OBJC_METACLASS_$_ApiECV in:
/Users/kevinmachado/Library/Developer/Xcode/DerivedData/EnvDevTestiPad-bvscnxvnzjltpxcxuoomuaqqsxpj/Build/Products/Debug-iphonesimulator/libAPI_ECV.a(ApiECV.o)
/Users/kevinmachado/Library/Developer/Xcode/DerivedData/EnvDevTestiPad-bvscnxvnzjltpxcxuoomuaqqsxpj/Build/Products/Debug-iphonesimulator/libMKCalendar.a(ApiECV.o)
ld: 2 duplicate symbols for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Я думаю, что эта ошибка возникает из-за того, что я пытаюсь дважды скомпилировать свой пользовательский фреймворк.
У меня есть 3 проекта в моей рабочей области. API_ECV
и iPadTest
оба вызываются MKCalendar
как фреймворк
Вы можете посмотреть здесь :
iPadTest
этап сборки :
API_ECV
этап сборки :
Если я удалю ссылку в API_ECV
, ошибки не возникло, но я не могу использовать MKCalendar framework
У кого-нибудь есть идея? Могу ли я связать свой пользовательский фреймворк, не компилируя его дважды?
Спасибо 😉
Комментарии:
1. Можете ли вы проверить, выбраны ли у вас armv7s? настройки сборки -> архитектура
2. Да, armv7s выбран во всех проектах
3. можете ли вы удалить и попробовать это один раз?
4. Никаких изменений .. :/ Но теперь у меня новая ошибка, я отредактировал свой пост
Ответ №1:
У вас есть два варианта:
-
Для простой зависимости, подобной вашей, просто удалите
libMKCalendar.a
изiPadTest
илиAPI_ECV
. Тогда он будет связан ровно один раз. (Вам нужно было бы указать путь к его заголовкам, если бы у компилятора возникли проблемы). -
Если у вас более сложные зависимости, просто включите
MKCalendar
фреймворк, тогда его можно разумно повторно использовать для разных целей. Фреймворки iOS доступны, если вы используете бета-версию Xcode 6.
Ответ №2:
Из того, что вы опубликовали, я предполагаю, что:
- API_ECV, связанный с MKCalendar
- API_ECV, связанный с iPadTest
- MKCalendar, связанный с iPadTest
Итак, вот откуда взялся ваш дубликат, API_ECV дважды по прямой ссылке и по ссылке MKCalendar. Два возможных решения:
- Не связывайте его с iPadTest, полагаясь на MKCalendar для его предоставления
- Отметьте это как «Необязательный» в MKCalendar (где указано «Обязательный»)