更新Xcode到版本2395后,出现了ld编译问题:计算的原子数目超出预期。

19

在我的M1 Mac上更新了Xcode到新版本后,然后使用make编译C++时,出现了以下问题:

0  0x1010c81a0  __assert_rtn + 140
1  0x100f4fa8c  mach_o::relocatable::Parser<arm64>::parse(mach_o::relocatable::ParserOptions const&) + 4536
2  0x100f21d38  mach_o::relocatable::Parser<arm64>::parse(unsigned char const*, unsigned long long, char const*, long, ld::File::Ordinal, mach_o::relocatable::ParserOptions const&) + 148
3  0x100f8a4ac  ld::tool::InputFiles::makeFile(Options::FileInfo const&, bool) + 1468
4  0x100f8d360  ___ZN2ld4tool10InputFilesC2ER7Options_block_invoke + 56
5  0x1893941f4  _dispatch_client_callout2 + 20
6  0x1893a7954  _dispatch_apply_invoke + 224
7  0x1893941b4  _dispatch_client_callout + 20
8  0x1893a5a04  _dispatch_root_queue_drain + 680
9  0x1893a6104  _dispatch_worker_thread2 + 164
10  0x189554324  _pthread_wqthread + 228
A linker snapshot was created at:
    /tmp/smr_dense_SL-2022-09-14-165143.ld-snapshot
ld: Assertion failed: (_file->_atomsArrayCount == computedAtomCount && "more atoms allocated than expected"), function parse, file macho_relocatable_file.cpp, line 2061.
collect2: error: ld returned 1 exit status
make: *** [smr_dense_SL] Error 1

很难说,但你先清理构建并更新命令行工具了吗?(顺便说一句,2395看起来是一个相当奇怪的版本号 - XCode 14.0 版本的构建号为14A309。那么2395版本到底是什么?) - molbdnilo
分配的原子数目超出预期(GCC 12) - user17732522
我认为这个问题已经在昨天的发布版本中得到了修复。 - Fred
@molbdnilo 2395 来自于命令行中的 xcode-select -v 命令。 - lemuel
2个回答

12

更新:下载14.1 beta 3或更高版本以解决此问题。否则,请阅读以下内容。

问题出在XCode 14.0版本上,我已经测试并确认。

将您的命令行工具版本降级到13.4即可解决问题。

首先从苹果开发者网站下载命令行工具并安装:https://download.developer.apple.com/Developer_Tools/Command_Line_Tools_for_Xcode_13.4/Command_Line_Tools_for_Xcode_13.4.dmg

您可以使用以下命令更改版本:

sudo xcode-select --switch /Library/Developer/CommandLineTools

要检查当前选定的Xcode命令行工具版本,请使用以下命令:

pkgutil --pkg-info=com.apple.pkg.CLTools_Executables

确保它是13.4。

这方面有多个GitHub讨论:

https://github.com/iains/gcc-12-branch/issues/6 https://github.com/Homebrew/discussions/discussions/3659


谢谢!!!我通过使用通过homebrew安装的clang并将以下内容放入makefile中来解决这个问题。CC="/opt/homebrew/opt/llvm/bin/clang" CXX_UNIX="/opt/homebrew/opt/llvm/bin/clang++" LDFLAGS="-L/opt/homebrew/opt/llvm/lib -Wl,-rpath,/opt/homebrew/opt/llvm/lib" CXXFLAGS="-I/opt/homebrew/opt/llvm/include -I/opt/homebrew/opt/llvm/include/c++/v1" AR="/opt/homebrew/opt/llvm/bin/llvm-ar" LD="/opt/homebrew/opt/llvm/bin/clang" - xuezou
我使用的是MacOS Big Sur,但clt 13.4不被支持。为了解决这些问题,我应该使用哪个版本的gcc/clt? 目前遇到的问题是在链接阶段出现了gcc-12 + Xcode 13.2.1的问题。 解决方法是降级到gcc-11。 - Vladimir Poslavskiy
我尝试了来自Homebrew的gcc-11,不幸的是看到了同样的问题。 - Jeff Hammond
1
链接无效。这是一个有效的链接:https://developer.apple.com/download/all/。请下载14.1 beta 3或更高版本以解决此问题。 - Vraj Shah
刚刚安装了14.2版本,不幸的是仍然看到这个问题。 - helmesjo

2

有另一种方法可以解决这个问题。

#pragma GCC optimize("O2")

并等待直到Xcode解决此问题


1
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community
1
在很多情况下,这还不够或被接受,解释一下造成问题的确切标记,O3 做了一些非常好的改进,我们可能不想失去。 - Spyros Mourelatos
@Spyros Mourelatos 是的,那是正确的。但是,如果你想要解决所有问题,你需要重新安装Xcode 14.1。 - Deng Roger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接