Предупреждение компоновщика (id) Apple Mach-O: сборка для MacOSX, но связывание с dylib, созданным для iOS - PullRequest
25 голосов
/ 24 августа 2011

Начиная с некоторого момента в прошлом xCode 4, когда жаловался на проблемы с компоновщиком:

ld: warning: сборка для MacOSX, но связывание с dylib, созданным для IOS: /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk/System/Library/Frameworks//CoreGraphics.framework/CoreGraphics

Я проверил все, но все еще ничего подозрительного в конфиге, и он компилируется и запускается. Единственное, что я вижу, это двойная косая черта перед CoreGraphics.framework, почему я не знаю. Попробовал удалить и снова добавить библиотеку на «Фазы сборки», которая не помогла.

Ответы [ 4 ]

5 голосов
/ 29 июля 2013

Иногда легче отлаживать проблемы 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)
4 голосов
/ 07 ноября 2013

Проверьте ваши пути поиска в рамках фреймворка для вашей главной цели и вашей тестовой цели.

У меня было много дерьма в моем.

старый проект был написан на XCode 4 и только что начал использовать модульные тесты в 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.
0 голосов
/ 24 декабря 2015

Если вы используете Carthage и компилируете приложение для Mac, поищите в Framework Search Paths вашего проекта, вы можете найти что-то вроде $(PROJECT_DIR)/Carthage/Build/iOS.

Удаление, устраняющее мою проблему.

0 голосов
/ 16 июля 2013

Эта проблема связана с неправильной версией фреймворка в XCode.Проект построен для Mac OS X, но использует фреймворк версии для iOS.

...