为 iPhone 编译时无法在 XCode 中链接
Posted
技术标签:
【中文标题】为 iPhone 编译时无法在 XCode 中链接【英文标题】:Cannot link in XCode when compiling for iPhone 【发布时间】:2009-09-30 13:50:44 【问题描述】:在为 iPhone 编译时,我设法搞砸了我的 XCode 项目设置。 链接时失败了
ld: warning: in /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk/System/Library/Frameworks/AddressBook.framework/AddressBook, file is not of required architecture
... (same for the other frameworks).
所以问题是它在为 iPhone 编译时尝试使用模拟器框架。
当你查看实际的链接命令时:
setenv IPHONEOS_DEPLOYMENT_TARGET 3.1
setenv MACOSX_DEPLOYMENT_TARGET 10.5
setenv PATH "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 -arch armv6 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk
-L/Users/ben/development/xcode_output/Debug-iphoneos
-F/Users/ben/development/xcode_output/Debug-iphoneos
-F/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk/
System/Library/Frameworks
-F/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/
System/Library/Frameworks
可以看到模拟器框架和iPhone框架路径都提供了。 我该如何改变呢?我在设置的任何地方都没有找到它。
项目设置中的[FRAMEWORK_SEARCH_PATHS, -F]
为空。
也许问题在于静态库中的链接。 该静态库的项目设置包含许多重复设置。 总是有两个相同的设置(例如,两个搜索路径块、两个 GCC-4.2 代码生成块等)看起来不正常。
问候
【问题讨论】:
您的“Base SDK”构建变量的值是多少? (右键单击目标和“获取信息”)。您还可以在 Build Info 中搜索有趣的字符串:iPhone、Simulator、3.0、3.1。您能否发布“重复设置”的屏幕截图?这个静态库是您项目中的另一个目标吗? 【参考方案1】:我设法解决这个问题的唯一方法是创建一个新项目并重新开始:-(
【讨论】:
【参考方案2】:ld:警告:在 /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk/System/Library/Frameworks/AddressBook.framework /AddressBook,文件不是必需的架构...(其他框架相同)。
您的设备构建对吗?不是模拟器? 找到相同的框架,但在设备下。导入时检查整个文件路径。
【讨论】:
【参考方案3】:检查目标的框架搜索路径。如果其中有指向 Simulator SDK 的显式路径,请将其删除。
【讨论】:
记住,目标设置,而不是项目设置。【参考方案4】:我认为问题在于我链接的静态库有两个用于 iPhone 和模拟器的目标。我已将其更改为只有一个目标,这似乎解决了问题。
问候
本
【讨论】:
【参考方案5】:我发现当我通过导航到 /Developer/platforms/.../Frameworks 以“旧方式”将框架添加到我的项目时,它在我的目标设置中添加了框架路径搜索列表的完整路径。这意味着我所有的框架都突然失效了。确保搜索列表中没有完整路径,并且您应该能够修复您的项目而无需创建新项目。
[编辑] 经过进一步检查,我发现 cdespinoza 已经回答了这个问题 :)
【讨论】:
以上是关于为 iPhone 编译时无法在 XCode 中链接的主要内容,如果未能解决你的问题,请参考以下文章
Jenkins 生成的 ipa 无法在 iPhone 上安装(iOS 9 + XCode 7.1)
.dylib 在 Debug 中链接,在 XCode 中找不到 iPhone 的 Release