2014-11-20 4 views
0

Я столкнулся с этой затяжной проблемой. Когда я пытаюсь создать проект, выбрав iOS-устройство в своем Xcode, он строит код без какой-либо ошибки, но когда я пытаюсь сделать то же самое с iOS-симулятором, он показывает мне следующую ошибку. Есть ли способ избежать этого файла библиотеки при создании в Simulator? Я также пробовал следующую ссылку, но я не мог определить точное решение.Сборка для устройства iOS, но ошибка сборки для iOS-симулятора

Спасибо заранее.

6 duplicate symbols for architecture i386

ld: warning: ignoring file /Users/iOS-MobileTeam/Downloads/iOS/LibraryFiles/libANMobilePaymentLib.a, missing required architecture i386 in file /Users/iOS-MobileTeam/Downloads/iOS/LibraryFiles/libANMobilePaymentLib.a (2 slices) 
    duplicate symbol _des_set_key in: 
     /Users/iOS-MobileTeam/Downloads/iOS/LineaSDK/libdtdev.a(des-524F6BE9122BCA82.o) 
     /Users/iOS-MobileTeam/Downloads/iOS/LineaSDK/libdtdev.a(des-D9CE0CBEE0B3BA81.o) 
    duplicate symbol _des_encrypt in: 
     /Users/iOS-MobileTeam/Downloads/iOS/LineaSDK/libdtdev.a(des-524F6BE9122BCA82.o) 
     /Users/iOS-MobileTeam/Downloads/iOS/LineaSDK/libdtdev.a(des-D9CE0CBEE0B3BA81.o) 
    duplicate symbol _des_decrypt in: 
     /Users/iOS-MobileTeam/Downloads/iOS/LineaSDK/libdtdev.a(des-524F6BE9122BCA82.o) 
     /Users/iOS-MobileTeam/Downloads/iOS/LineaSDK/libdtdev.a(des-D9CE0CBEE0B3BA81.o) 
    ld: 3 duplicate symbols for architecture i386 
    clang: error: linker command failed with exit code 1 (use -v to see invocation) 

    Ignoring file /Users/iOS-MobileTeam/Downloads/iOS/LibraryFiles/libANMobilePaymentLib.a, missing required architecture i386 in file /Users/iOS-MobileTeam/Downloads/iOS/LibraryFiles/libANMobilePaymentLib.a (2 slices) 

ответ

2

Статическая библиотека нарушена, поскольку он содержит два отдельных объектных файлов, содержащих одни и те же символы (функции).

Он должен быть восстановлен, или если у вас нет источника вы можете распаковать его, удалите файл обижая, а затем повторно упаковать его (непроверенные):

$ mv libdtdev.a libdtdev-old.a 
$ mkdir xxx 
$ cd xxx 
$ ar x ../libdtdev-old.a 
$ rm des-D9CE0CBEE0B3BA81.o 
$ ar cr ../libdtdev.a *.o 
$ cd .. 
$ rm -rf xxx 

Однако если статическая библиотека содержит несколько архитектур, это становится много более сложным.

+0

#trojanfoe Не могли бы вы рассказать мне об этом? У меня есть файл статической библиотеки. Я не знаю, как его распаковать. Мне нужна ваша помощь. –

+0

Я показал вам, как его распаковать. – trojanfoe

+0

Нужно ли выполнять эти комментарии в терминале, чтобы распаковать его? –

-1

Наконец-то я нашел исправление для вышеупомянутой проблемы. все заслуга @Khanh

How to ignore some static library for iOS simulator

выше ссылка помогла мне решить проблему.

шаги исправить вопрос:

  1. Перейти к сборки проекта настройки и поиска других флагов компоновщика. 2.Expand Другие секции флагов компоновщика. Там будет два режима отладки и Release
  2. Место появится курсор Debug Mode а + символ.
  3. Щелкните по плюсовому символу.
  4. Новый вариант будет добавлен как Любая архитектура | Любой SDK.
  5. Изменить что Любой SDK для Любой IOS Simulator SDK
  6. Набор -objC Значение для Любой IOS Simulator SDK

enter image description here

+1

Это не решение проблемы. Это решение другой проблемы, из-за которой ваша проблема не проявляется. Проблема в этом случае заключается в том, что теперь вы больше не используете -all_load, а затем заставляете компоновщик пропускать части вашего статического архива (включая дубликаты символов), поскольку он решил, что они не используются. Если эти символы были фактически использованы/необходимы вашей инфраструктуре, вы снова получите сообщение об ошибке. –

0

Вопрос заключается в том, что ваш libANMobilePaymentLib. статический архив не был создан должным образом. Если это сторонняя библиотека, вы должны попросить автора предоставить обновленную версию, которая устраняет эту проблему, а инструкции трояна по распаковке и переупаковке архива без какой-либо из реализаций - это, вероятно, лучший выбор для временного обходного пути.

Если вы сами создали библиотеку или хотите передать информацию автору, проблема заключается в том, что библиотека i386 библиотеки содержит дубликаты символов des_set_key, des_encrypt и des_decrypt.Я подозреваю, что это было вызвано случайно включением des.c дважды при создании libANMobilePaymentLib.a. Другая возможность заключается в том, что автор libANMobilePaymentLib.a предполагал, что эти функции являются статическими и не экспортируются.

Смежные вопросы