Apple Mach-O链接器(id)警告:为MacOSX构建,但是针对为iOS构建的dylib进行链接

时间:2011-08-24 10:04:43

标签: ios xcode linker dylib mach-o

从过去的xCode 4中的某个点开始抱怨链接器问题:

  

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

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

4 个答案:

答案 0 :(得分:5)

有时通过查看正在使用的命令行的构建日志来调试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)

答案 1 :(得分:4)

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

我手上有很多垃圾。

在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.

答案 2 :(得分:0)

如果您正在使用Carthage并编译Mac应用,请搜索您的项目Framework Search Paths,您可能会发现类似$(PROJECT_DIR)/Carthage/Build/iOS的内容。

删除修复我的问题。

答案 3 :(得分:-3)

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