Предупреждение о компоновщике Apple Mach-O (id): создание для MacOSX, но соединение с dylib, созданное для iOS
Начиная с некоторого момента в прошлом xCode 4, жалуясь на проблемы с компоновщиком:
ld: предупреждение: создание для MacOSX, но соединение с dylib, созданное для IOS: /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk/System/Library/Frameworks//CoreGraphics.framework/CoreGraphics
Я проверил все, но все еще ничего подозрительного в конфигурации, и он компилируется и запускается.
Единственное, что я вижу, это двойные косые черты перед CoreGraphics.framework, почему я не знаю. Попробовал удалить и добавить снова библиотеку на "Фазы сборки", которые не помогли.
Ответы
Ответ 1
Иногда легче отлаживать проблемы Xcode, просматривая журнал сборки для используемых им команд.
Если вы строите из командной строки, вы можете получить это сообщение, если не укажете -miphoneos-version-min =
This compiles:
(where conftest.c just contains int main() {})
/Applications/Xcode5.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch i386 --sysroot /Applications/Xcode5.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.0.sdk --sysroot /Applications/Xcode5.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.0.sdk -miphoneos-version-min=6.0 conftest.c
And this gives the error:
/Applications/Xcode5.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch i386 --sysroot /Applications/Xcode5.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.0.sdk --sysroot /Applications/Xcode5.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.0.sdk conftest.c
ld: building for MacOSX, but linking against dylib built for iOS Simulator file '/Applications/Xcode5.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.0.sdk/usr/lib/libSystem.dylib' for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Ответ 2
Проверьте свои пути поиска в каркасе для своей главной цели и вашей тестовой цели.
У меня было много дерьма в моем.
имел старый проект, написанный на XCode 4, и только начал использовать Unit Tests в XCode 5.
Здесь минимум, я должен запустить свой тестовый проект
Project Navigator > click on project at top >
Targets > Build Settings > Framework Search Paths
TARGET:my_project
$(inherited)
"$(SRCROOT)"
"$(SRCROOT)/my_project"
TEST:my_projectTests
"$(SDKROOT)/Developer/Library/Frameworks" <<XCTest.framework is here
"$(DEVELOPER_LIBRARY_DIR)/Frameworks"
"$(SRCROOT)/.."
"$(SRCROOT)" << Documents/my_project
"$(SRCROOT)/my_project" << Documents/my_project/my_project
where directory structure is
Documents/my_project
my_project.xcodeproj
/my_project
Примечание. Если вы перетащите фреймворк в XCode. XCode 5 имеет плохую привычку жестко кодировать путь
/Users/gbxc/Documents/my_project
должен быть
"$(SRCROOT)" << Documents/my_project
"$(SRCROOT)/my_project" << Documents/my_project/my_project
поэтому, если вы переместили проект, могут возникнуть проблемы.
Лучший способ проверить правильность заключается в создании нового проекта с одним представлением, который запускает тесты в порядке.
Run the Test action
By default it fails but at least testing is running
then compare the Framework Search Paths.
Ответ 3
Если вы используете Карфаген и компилируете приложение Mac, выполните поиск по вашему проекту Framework Search Paths
, вы можете найти что-то вроде $(PROJECT_DIR)/Carthage/Build/iOS
.
Удаление исправления моей проблемы.
Ответ 4
Эта проблема связана с неправильной версией фрейма в Xcode. Проект построен для Mac OS X, но он использует инфраструктуру версии iOS.