我正在尝试使用Xcode beta 6在设备上安装我的应用,并且在链接阶段失败并出现以下错误:
ld: linking module flags 'Objective-C Class Properties': IDs have conflicting values for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Xcode 8 beta 3正在成功构建应用程序,这可能是什么问题?
答案 0 :(得分:2)
尝试关闭构建的链接时优化(LLVM_LTO)。我希望他们能在最终版本中解决这个问题。
答案 1 :(得分:1)
我在我的非 Xcode 项目中遇到了类似的问题。
当我将 Xcode 升级到版本 12 时,我开始看到这些消息。
我的设置由几个 3rd 方库和依赖于它们和一些 macOS 系统框架的主项目组成。该项目基于 CMake。
我试图用新的 Xcode 版本重建一切,但没有成功。但我可以确认这与 LTO 相关。 (是的,我也在用瘦 LTO 构建 3rd 方库。)
当我为最新的 macOS 版本 - 11 设置正确的 -isysroot
时发生了突然的变化。然后链接器开始抱怨最低 OSX 版本,特别是太旧了。当我将其设置为 10.15(这是我当前的 macOS)时,问题完全消失了。
因此解决方案是:
-mmacosx-version-min=10.15
-isysroot
设置为MacOSX11.1.sdk
,例如:-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
(MacOSX.sdk
是lates的符号链接)注意:我使用的是命令行工具中的 -isysroot
,但某些 autoconf
内容也可以解析为 Xcode.app/Contents/Developer/...
最新的 SDK,没有任何问题。两个 SDK(一个来自 Xcode 本身,另一个来自命令行工具)是兼容的。
注意/2:我在这里发布解决方案,因为这个问题是最相关的问题。
答案 2 :(得分:0)
这是因为当包含类别中的类属性和包含类别但是由Xcode 7(或之前)生成的文件的混合文件时,Xcode 8不能进行LTO。 现在唯一的解决方法似乎是使用Xcode 8重建所有文件。