Дублікати символів для архітектури arm64


103

Коли я намагаюся запустити свій проект Xcode, він не вдається з помилкою, яка стверджує, що у мене є дублікати символів. Я подивився в Інтернеті, де знайти ці копії, але не пощастило:

введіть тут опис зображення

Будь-які ідеї, як це виправити?


1
це означає, що у вас занадто багато BFAppLinkReturnToRefererView
Андрій Чернуха

Крім того, ви можете трохи прибрати проект, а не посилатися на рамки, що сидять на вашому робочому столі. :)
picciano

У моєму випадку я додав зовнішній NSString * const tColor; у .h файл та NSString const * tColor = @ "# 000022"; у двох різних .m класах.
ios_dev

Ви можете знайти те , що ви шукаєте тут stackoverflow.com/a/46678210/988941
MoOx

Відповіді:


65

З помилок вийде, що FacebookSDK.framework вже включає класи Bolts.framework. Спробуйте видалити додатковий Bolts.framework з проекту.


22
як? ви можете, будь ласка, вести мене крок за кроком
Імдад Алі

68

Для мене це допомогло переключити налаштування компілятора "Без загальних блоків" на НІ: Це, здається, має сенс, налаштування пояснюється тут: Для чого використовується GCC_NO_COMMON_BLOCKS?


Ти чоловік! Щойно зробив новий проект xCode 7.3.1, а налаштування за замовчуванням - ТАК :(
Яро

4
Ця опція була включена для мене у вікні "Оновити проект до рекомендованих налаштувань" Xcode.
commscheck

Ти найкращий
показуйморути

безцінна порада, але Доха не допомогла в моєму випадку! : O
Fattie

49

Використовуючи Xcode 8, для мого проекту параметр "Оновити проект до рекомендованих налаштувань" увімкнено "Без загальних блоків".

Якщо повернути його в положення OFF, все виправлено.


2
Оновіть проект до рекомендованих налаштувань, як це зробити? я маю на увазі з якого меню?
Саззад Хіссан Хан

@SazzadHissainKhan Це в налаштуваннях збірки.
Поїздка


21

Я переплутав свої стручки під час пониження стручка, і мені вдалося вирішити проблему з подвійними символами для архітектури arm64 , видаливши стручки та знову встановивши їх за допомогою:

pod deintegrate
pod install

Я використовував SDK Google Місця на карті, інтегрований через CocoPods - 3.9.0, і ця відповідь вирішила мою проблему.
andrewlundy

11

Іншим рішенням є:

Виберіть Проект -> Ціль -> Фаза збірки -> Компілюйте джерело -> шукайте файл, який згадується в третьому останньому рядку помилки (У вашому випадку BFAppLinkReturnToRefererView.o ).

Тоді ви побачите в результатах пошуку 1 або 2 файли.

Вийміть одну з них і знову складіть . Це слід перекомпілювати зараз, оскільки залишився лише один файл і більше конфліктів для збирання.

Якщо це не працює, файл, ймовірно, має в ньому помилки, і ви повинні видалити їх, а потім перекомпілювати. Це має працювати знову.


2
Вкрай занижена відповідь, дякую за вашу допомогу, Лукасе! :)
patreu22

Без проблем радий, що він вирішив вашу проблему :)

10

Після оновлення до Xcode 8 я отримав повідомлення про оновлення до рекомендованих налаштувань. Я прийняв і все було оновлено. Я почав отримувати питання про час компіляції:

Дублікат символу для XXXX Дублікат символу для XXXX Дублікат символу для XXXX

Всього 143 помилки. Перейшов до націлювання-> Налаштування збірки -> Немає загальних блоків -> Встановіть його на НІ. Це вирішило це питання. Проблема полягала в тому, що інтегровані проекти мали спільні блоки коду, і тому він не зміг їх скласти. Пояснення можна знайти тут .


9

Ця помилка трапляється, коли Linker намагається зв’язати файли obj. Кілька причин, які я міг би подумати про цю помилку:

  1. Скопійований функція / клас визначається у двох різних місцях / файлах проекту, і лише один з них повинен був скласти для будь-якої зміни команди збірки. Але якось обидва файли були зібрані у вашому проекті. Тому вам потрібно перевірити ваші умови if-else чи інші залежності, які додають src-файли до списку файлів, необхідних для складання, і видалити непотрібний файл для вашої конкретної команди збірки.

  2. Скопійований функція / клас визначається випадково у двох різних місцях / файлах проекту. Видаліть неправильне визначення.

  3. Очистіть каталог OBJ перед тим, як знову створити, там можуть бути старі файли obj з попередніх збірок, які можуть спричинити цей конфлікт.

PS Я не експерт, але саме так я вирішив цю проблему, коли зіткнувся з нею. :)


9

Якщо ви переходите на Xcode 7 або 8 і відкриваєте дійсно старий проект, я зіткнувся з цією проблемою:

в SomeConstFile.h

NSString * const kAConstant;

в SomeConstFile.m

NSString *const kAConstant = @"a constant";

Раніші версії компілятора припускали, що визначення у файлі заголовка було зовнішнім, і тому, зокрема, SomeConstFile.h повсюдно було нормальним.

Тепер вам потрібно чітко оголосити ці consts як зовнішні:

в SomeConstFile.h

extern NSString * const kAConstant;

1
Дякую за це! Була проблема з файлом constants.h Я створював lol
Сун Міні Кім

1
Дякую за відповідь Я теж зіткнувся з тим же питанням, і ваша відповідь працювала на мене ...
reetu

1
Дякую, я боровся за цю проблему протягом останніх 3-4 годин
Суміт Кумар Саха

9

Нижче Patch працює для мене .. :)

Step 1: Go to TARGETS -> Build Settings -> No Common Blocks -> No

Step 2: Go to TARGETS -> Build Settings -> enable testability -> No

Повернення його НІ вирішило проблему!


2
Крок 2: Вирішено мою проблему. Дякую :)
Доральд

2

Ну, а іноді, коли ви використовуєте SDK, як FB, або бібліотеки, такі як Vuforia чи GoogleAnalytics, додавання зразкових проектів може спричинити проблему з тим, що вони вже включають фреймворки і подібне, тому ви повинні переконатися, що не повторювати символи, які ви додаєте вручну, поки вони вже є включені до зразків


2

Для мене проблемою був стиль створення const, який працював чудово до цього iOS8 .. У мене було кілька рядків:

int const kView_LayoutCount = 3;

у моєму .h файлі. Шість рядків, як-от, призвели до 636 файлів з посиланнями, коли звичайні блоки були встановлені на НІ. (14k + якщо ТАК). Перемістили рядки до .m після зняття .h декларації значення та компіляції.

Сподіваюся, це допомагає іншим!


2

У моєму випадку причина була занадто дурною:

У мене був файл Constant.h, де були визначені макроси. Я думав робити там NSString. і зробив це:

NSString const *kGreenColor = @"#00C34E";

це спричинило проблему дублювання символів для архітектури arm64 і команди Linker не вдалося з кодом виходу 1. Видалення const лінії NSString працювало для мене.


2

перевірте ваш файл включення, у мене виникла ця проблема, оскільки я випадково # імпортував "filename.m" замість "filename.h", autocorrect (tab) поставив "m" не "h".


Дякую вам велике, я не розумів, що я допустив цю помилку, займався весь свій час. Ще раз дякую 👍
Supertecnoboff

1

З помилок, будь-які Класи з'являться кілька разів. Знайдіть і видаліть, що Класи він буде працювати.

Я створюю AppDelegate.h і .m файл, створюючи кілька разів. Тож ця помилка станеться. Нарешті знайдіть і видаліть, що класи добре працюють для мене.


1

Щоб вирішити цю проблему, перейдіть до фаз збірки та пошуку дублікатів файлів, таких як (facebookSDK, uneads) та видалення (розширення file.o), а потім складіть заново.


0

Для мене я створив метод, який називається sampleMethodу ViewController_A, і створив той самий метод у ViewController_B теж. Це спричинило мені цю помилку, потім я змінив ім'я методу в ViewController_B на secondSampleMethod. Він виправив помилку.

Здається, хороша функція зменшити код і не дублювати той самий код у багатьох місцях.

Я спробував змінити No Common блоків з "Так" на "ні", тоді ввімкнувши перевірку з "так" на "ні". Я перевіряв дублікати файлів також у фазах збірки, але немає дублікатів.


0

У мене виникло це питання, тому що я ліниво визначав змінну в моєму .m поза методом, а потім в іншому .m файлі я визначав іншу змінну з такою ж назвою поза методом. Це викликало проблему дублювання глобальної змінної імені.


0

Проблема для мене полягала в тому, що я вручну включив рамку, але потім також включив ту саму рамку в CocoaPods, не знаючи, що я це зробив. Як тільки я видалив те чи інше, проблема пішла



0

Я зміг вирішити цю помилку, яка сказала "158 дублікатів символів для архітектури armv7, 158 дублікатів символів для архітектури arm64" --- Якщо це теж ви отримуєте, то це означає, що ви намагаєтеся скомпілювати файл, який імпортує або успадковує каркас або статичну бібліотеку, що має посилання на код C ++ або файли. Найпростішим способом впоратися з цим було б змінити розширення файлу .m на .mm. Ось як це обробляється, якщо ви використовуєте Objective C, але не впевнені в Swift.

Також у налаштуваннях збірки - ви можете оновити "інші прапори посилання" до -lc ++


0

Якщо хтось експериментує над цим Flutter, не намагайтеся дезінтегрувати, pod init.

Як я вирішив, чи працює зависання чистого, трепетного запуску -d [iOS Device]

Надія може комусь допомогти.


0

Plz Змінити налаштування.

Крок 1: Перейдіть до ЦІЛИ -> Налаштування збірки -> Немає загальних блоків -> Ні

Крок 2: Перейдіть до ЦІЛИ -> Налаштування збірки -> увімкніть перевірку -> Ні

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.