問題
macでg++を利用していて、OSのバージョンを12に変更した後以下のようなエラーが出ることがありました。(追記:2023/10/30 Xcodeのバージョンアップで度々似たようなエラーが起こるのでxcode-selectのダウングレード方法を追加)
$ g++ -std=c++17 -Wall -Wextra -I . code.cpp -o a.out
0 0x1029c41a0 __assert_rtn + 140
1 0x10284ba8c mach_o::relocatable::Parser<arm64>::parse(mach_o::relocatable::ParserOptions const&) + 4536
2 0x10281dd38 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 0x1028864ac ld::tool::InputFiles::makeFile(Options::FileInfo const&, bool) + 1468
4 0x102889360 ___ZN2ld4tool10InputFilesC2ER7Options_block_invoke + 56
5 0x1b8dc01f4 _dispatch_client_callout2 + 20
6 0x1b8dd4f8c _dispatch_apply_invoke_and_wait + 224
7 0x1b8dd426c _dispatch_apply_with_attr_f + 1152
8 0x1b8dd447c dispatch_apply + 108
9 0x1028891f4 ld::tool::InputFiles::InputFiles(Options&) + 616
10 0x10280b6c0 main + 552
A linker snapshot was created at:
/tmp/a.out-2022-11-10-221006.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
エラーが出るコード(例)
code.cpp
#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
int main(){
int n; cin >> n;
map<int,vector<int>> mp;
rep(i,n){
mp[i].push_back(i);
}
for(auto &p:mp){
for(auto &q:p.second){
cout << q << endl;
}
}
}
環境
macOS Monterey 12.6.0
xcode-select 14.0.0.0.1.1661618636
注意事項
ここではXcodeをインストールしておらず、xcode-selectのみをインストールしていることを想定しています。
xcode-selectのアップグレードで解決
xcode-selectのアップデートが来ている場合はmacのシステム設定からアップデートを試してみましょう。
xcode-selectのダウングレードで解決
xcode-selectを削除した後公式サイトからバージョンを指定してインストールします。
xcode-selectのパスの確認(参考 https://srcw.net/archives/794/)
xcode-select -p
# 単体のCommand Line Toolsの場合
/Library/Developer/CommandLineTools
# Xcodeの場合
/Applications/Xcode.app/Contents/Developer
xcode-selectの削除
# 単体のCommand Line Toolsの場合
sudo rm -rf /Library/Developer/CommandLineTools
# Xcodeの場合
sudo rm -rf /Applications/Xcode.app/Contents/Developer
xcode-selectのバージョンを指定して再インストール
下のApple Developerからバージョンを指定してインストールしてください。
参考