26

从过去 xCode 4 开始抱怨链接器问题:

ld:警告:为 MacOSX 构建,但链接到为 iOS 构建的 dylib:/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk/System/Library/Frameworks//CoreGraphics.framework/CoreGraphics

我已经检查了所有内容,但配置中仍然没有任何可疑之处,它可以编译并运行。我唯一看到的是CoreGraphics.framework之前的双斜杠,为什么我不知道。尝试在“构建阶段”上删除并再次添加库,但没有帮助。

4

4 回答 4

6

有时,通过查看其正在使用的命令行的构建日志来调试 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)
于 2013-07-29T16:00:30.193 回答
5

检查您的主要目标和测试目标的框架搜索路径。

我有很多废话。

有用 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.
于 2013-11-07T15:48:47.663 回答
0

如果您正在使用 Carthage 并编译 Mac 应用程序,请搜索您的项目,Framework Search Paths您可能会找到类似$(PROJECT_DIR)/Carthage/Build/iOS.

删除它解决了我的问题。

于 2015-12-24T19:03:09.067 回答
-3

此问题是由于在 Xcode 中包含错误的框架版本。该项目是为 Mac OS X 构建的,但它使用 iOS 版本的框架。

于 2013-07-16T03:56:15.407 回答