повторяющиеся символы для архитектуры i386 — Ошибка при добавлении пользовательского фреймворка

#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 этап сборки : Этап сборки iPadTest

API_ECV этап сборки : Фаза сборки API_ECV

Если я удалю ссылку в API_ECV , ошибки не возникло, но я не могу использовать MKCalendar framework

У кого-нибудь есть идея? Могу ли я связать свой пользовательский фреймворк, не компилируя его дважды?

Спасибо 😉

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

1. Можете ли вы проверить, выбраны ли у вас armv7s? настройки сборки -> архитектура

2. Да, armv7s выбран во всех проектах

3. можете ли вы удалить и попробовать это один раз?

4. Никаких изменений .. :/ Но теперь у меня новая ошибка, я отредактировал свой пост

Ответ №1:

У вас есть два варианта:

  1. Для простой зависимости, подобной вашей, просто удалите libMKCalendar.a из iPadTest или API_ECV . Тогда он будет связан ровно один раз. (Вам нужно было бы указать путь к его заголовкам, если бы у компилятора возникли проблемы).

  2. Если у вас более сложные зависимости, просто включите MKCalendar фреймворк, тогда его можно разумно повторно использовать для разных целей. Фреймворки iOS доступны, если вы используете бета-версию Xcode 6.

Ответ №2:

Из того, что вы опубликовали, я предполагаю, что:

  • API_ECV, связанный с MKCalendar
  • API_ECV, связанный с iPadTest
  • MKCalendar, связанный с iPadTest

Итак, вот откуда взялся ваш дубликат, API_ECV дважды по прямой ссылке и по ссылке MKCalendar. Два возможных решения:

  • Не связывайте его с iPadTest, полагаясь на MKCalendar для его предоставления
  • Отметьте это как «Необязательный» в MKCalendar (где указано «Обязательный»)