Ошибка при попытке связать толстый двоичный файл с целью 64-битного симулятора
У меня есть статическая библиотека lipo'd для iOS и OS X с 5 архитектурами (x86_64, i386, armv7, armv7s, arm64).
- Архитектура x86_64 была построена с использованием macosx SDK
- Архитектура i386 была построена с использованием iphonesimulator SDK
- Архитектура ARM была построена с использованием iphoneos SDK
Когда я пытаюсь связать полученную библиотеку в примерном приложении, она работает при сборке для устройства или для 32-битного целевого симулятора iOS. Но когда я пытаюсь построить его для 64-битного целевого симулятора iOS, я получаю ошибку компоновщика:
ld: framework not found CoreServices for architecture x86_64
Если я удалю срез x86_64 из толстой библиотеки, он будет работать для всех устройств и симуляторов.
Я предполагаю, что это потому, что компоновщик предпочитает архитектуру x86_64, если он там для 64-битного симулятора. Но так как он был скомпилирован и связан для macosx SDK, он как-то кодируется в зависимости от OS X.
Я попытался добавить второй срез x68_64 для SDK iphonesimulator, но lipo не позволил мне. Также я пытался найти способ заставить симулятор использовать архитектуру i386 даже для 64-битных сборок, но пока не повезло.
Если это абсолютно необходимо, я могу создать 2 двоичных файла, которые решат эту проблему, но я бы предпочел, чтобы они были в одном файле. Есть ли способ добиться этого?
2 ответа
Я решил это, только создав его для устройства iOS и симулятора. 64-битный фрагмент iOS Simulator SDK в равной степени работает для целей iOS и OS X, при условии, что вам не нужны никакие другие платформы, кроме тех, которые используются совместно для OS X и iOS (Foundation только в моем случае).
Проект и Стручки:
Настройки сборки ---> Связать фреймворки Автоматически изменить ДА на НЕТ и перестроить статическую библиотеку! это работа!