it-roy-ru.com

Xcode 9 неопределенных символов для архитектуры x86_64

после перехода на Xcode 9 я получаю ошибки, это выглядит так.

 enter image description here

Я пропустил названия проектов и классов, но есть список классов, заканчивающийся суффиксом .o. В Xcode 8.3.2 все работает. У меня есть 2 проекта, один - это библиотека, которая строится без проблем. Другим проектом является тестовое приложение, которое указывает на библиотеку с помощью директивы: path в Podfile. В обоих проектах параметры сборки -> архитектура установлены на стандартную архитектуру, только для сборки активных архитектур задано ОТЛАДКА: Да, РЕЛИЗ: Нет. Вы сталкивались с этой проблемой? Спасибо заранее за помощь.

8
Jozef Vrana

Когда я запускал сборку для профилирования, она работала, но при классической сборке были упомянуты ошибки. После поиска по журналам кажется, что с флагами происходит странное поведение, особенно -fprofile-instr-generate. Решение состояло в том, чтобы установить флажок Enable Coverage в значение No в настройках сборки проекта библиотеки. Это стреляло в темноту, но как-то получилось.

0
Jozef Vrana

Столкнулся с подобной проблемой. Просто опубликуйте это здесь на случай, если это может кому-нибудь помочь.

Использовал класс AbcService из фреймворка (написанного на Swift 3 и нами) в классе Objective-c нашего приложения B. После обновления с Xcode8/Swift3 до Xcode9/Swift4 ему не удалось создать архив для релиза config, из-за ошибки Undefined symbols этого класса при компоновке:

Undefined symbols for architecture arm64:
   "_OBJC_CLASS_$__TtC15XxxabcServices17AbcService", referenced from:

Странно то, что он прекрасно работал для архивации debug config и для запуска в эмуляторе.

Потратил почти 1 день, чтобы выяснить причину: в классе Swift AbcService в платформе отсутствовал модификаторpublic.

7
Wei WANG

Простой трюк здесь: Перейти -> Перейти в папку "/ Библиотека/Разработчик/XCode" удалить Производные данные затем очистите ваш проект, а затем запустить.

4
PrasannaKumar

Поскольку вы используете Cocoapods, вам, скорее всего, нужно обновить их.

Это означает, что вам нужно сделать pod update в командной строке внутри директории вашего проекта, а затем перестроить ваш проект в Xcode.

В целом, при использовании новой основной версии XCode необходимо перестроить все компоненты. Ваше сообщение об ошибке говорит вам, что у вас уже есть объектные файлы (файлы * .o - это, в основном, то, что компилятор создает из ваших исходных файлов), несовместимые с вновь скомпилированными объектными файлами (компоновщик, который жалуется в вашем случае, имеет цель объединения или «связывания» всех объектных файлов).

Иногда может потребоваться очистить ваши производные данные (вещи из кэша Xcode). Вы можете сделать это, перейдя в меню Product в Xcode и, удерживая нажатой клавишу Option/Alt, выберите пункт меню «папка чистой сборки».

0
Thomas Krajacic