2016-09-27 2 views
2

Я обновил до XCode 8.0, и это дает мне печаль. Первая проблема заключалась в подписании кода. Это я исправил, выбрав профиль подготовки для отладки и выпуска из общих параметров проекта. Странно не понятно, почему он не мог просто работать, так как он отлично компилировался с предыдущими XCode. Раньше XCode сказал бы, что нет предварительного профиля и подскажите его исправить и исправить. Кажется, шаг назад. В любом случае, прошел этот вопрос.Ошибка Mach-O Linker, неопределенные символы для архитектуры после обновления xcode до 8.0

вопрос я сталкивается весь день эта ошибка при компиляции

Undefined symbols for architecture arm64: 
    "_write_ret", referenced from: 
     _dwsl in libtestlib.a(testlib.o) 
ld: symbol(s) not found for architecture arm64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

я искал write_ret и это только прототип в файле заголовка, эта функция не вызывается вообще нигде! ! (Предположим, что статическая библиотека является частью более крупного проекта, я привел только файлы/код, необходимые для компиляции статической библиотеки для iOS). Это прекрасно готовилось в течение многих лет. Я вернулся к статическому исходному коду libary и сам с юмором удалил прототип write_ret, скомпилировал его и обновил библиотеку в моем проекте и перестроил. Повторите ту же ошибку !. Что здесь происходит?? Я подтвердил, что он определенно использует правильную построенную библиотеку.

Я тогда решил, что я только что построил для armv7 только как это приложение для предприятий. Я вернулся к файлу проекта статической библиотеки и избавился от armv7s и arm64 от «valid architectures». Я меняю «архитектуры» на armv7. Я перестроил библиотеку и обновил проект с помощью новой библиотеки.

Я также пошел в основной проект и изменил допустимые архитектуры, чтобы построить только armv7.

На этот раз, когда я построил свой проект, я получаю эту ошибку

ld: warning: ignoring file /Users/rrr/Library/Developer/Xcode/DerivedData/P-eaxegvaceikvgqgllfiardmoorbv/Build/Products/Debug-iphoneos/libtestlib.a, 
file was built for archive which is not the architecture being linked (armv7): 
/Users/rrr/Library/Developer/Xcode/DerivedData/P-eaxegvaceikvgqgllfiardmoorbv/Build/Products/Debug-iphoneos/libtestlib.a 

В терминале я побежал липо libtestlib.a -info я получаю это:

input file libtestlib.a is not a fat file 
Non-fat file: libtestlib.a is architecture: armv7 

Так он построен для armv7, так что XCode жалуется на действительно?

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

Я хотел бы получить его для работы со всеми архитектурами, как это было до обновления XCode, который я сделал в пятницу. Но худший случай, по крайней мере, компилируется только для armv7. Я понимаю, что он все равно будет работать на любом iPhone 5 и новее в любом случае.

ответ

1

Сначала, как вы уже знаете, вы должны поддерживать arm64, чтобы поддерживать архитектуру 64 бит, следуя правилу Apple.

Во-вторых, давайте поговорим о проблеме неопределенного символа, ваш первый вопрос.
Я точно не знаю из вашего описания ситуации, но,
, одна вещь, на мой взгляд, читающая вопрос, что ваша статическая библиотека может зависеть от некоторой dylib (динамической или разделяемой библиотеки), которая устарела из Xcode 7.

Возможный сценарий ваша библиотека dylib была отмечена красным цветом в проекте из версии обновления Xcode 8, потому что это было заменено на tbd вместо dylib.

Итак, эта библиотека теперь отсутствует, и вы удалили ее в списке библиотеки, и вы ее забыли.
Вот почему ваш символ _write_ret в libtestlib.a больше не может быть связан для архитектуры arm64. (Dylib отсутствует статус.)

Если этот сценарий верен, импортируйте tbd вместо dylib (текстовые библиотеки-заглушки).


давайте поговорим о вашем втором вопросе, связанном с журналом ошибок.

ld: warning: ignoring file /Users/rrr/Library/Developer/Xcode/DerivedData/P-  eaxegvaceikvgqgllfiardmoorbv/Build/Products/Debug-iphoneos/libtestlib.a, 
file was built for archive which is not the architecture being linked (armv7): 
/Users/rrr/Library/Developer/Xcode/DerivedData/P- eaxegvaceikvgqgllfiardmoorbv/Build/Products/Debug-iphoneos/libtestlib.a 

Этот журнал может быть о Build Active Architecture Только в настройках сборки Xcode.
проверить «Только создать активную архитектуру» от «Да» до «Нет».
Этот журнал ошибок может быть сгенерирован, если для параметра «Создать активную архитектуру» установлено значение «ДА» в вашей ситуации установки сборки. и, если он не работает, вы когда-нибудь очищали каталог DerivedData и проект?

Если вы уже пробовали, это может быть возможно, что ваша статическая библиотека на самом деле не в /Users/rrr/Library/Developer/Xcode/DerivedData/P-eaxegvaceikvgqgllfiardmoorbv/Build/Products/Debug-iphoneos/libtestlib.a ,

Таким образом, вы можете перенести свой файл статической библиотеки в этот проект и попробовать его снова.

Это всего лишь сценарий для вашей ситуации, так как я получил ваш вопрос. Хотелось бы, чтобы это немного помогло.

Спасибо.

+0

Хорошо, я только что заметил libstdC++. 6.dylib и libxml2.dlyib являются красными. Может быть так? Позвольте мне попытаться их прочитать. Это правильная вещь? Я смущен этим «import tbd вместо dylib». – rukiman

+0

Да, вы можете импортировать libstdC++ 6.tbd вместо dylib ИЛИ вы можете сохранить импорт dylib. позвольте мне связать полезные ответы: http://stackoverflow.com/questions/31420166/libsqlite3-dylib-and-libz-dylib-missing-in-xcode-7-how-do-i-use-parse – boraseoksoon

+0

У меня была надежда, Я поменял их на .tbd equilavents, но не надеялся. Он все еще терпит неудачу с символом (-ами), который не найден для архитектуры arm64 для функции _write_ret. Поэтому, возможно, я посмотрю каталог производных данных – rukiman

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