MacOS 使用 <bits/extc++.h> 標頭檔 (以 VSCode 為例)
前言
先說結論,如果用 Clang 作為編譯器是難以使用 <bits/extc++.h>
標頭檔的,會產生各種神奇報錯,本文採取適用 Homebrew 安裝 GCC 的方式,並且使用 GCC 作為編譯器。
本來在寫 CSES 想要用看看 pbds,啊結果發現完全沒辦法用,網路上到處找好像都沒什麼解決方法,研究一番之後就有了這篇文章。
安裝 Homebrew (如果沒有的話)
1 | /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" |
安裝 GCC
這邊可以選擇安裝不同版本的 GCC,但要注意 Arm 架構(M 系列晶片)的 Mac 只有支援 GCC 11 以上的版本。1
2
3
4
5# 安裝最新版本的GCC
brew install gcc
# 安裝GCC 11
brew install gcc@11
使用 GCC 編譯器
如果不知道安裝的 GCC 版本,可以使用以下指令查看:1
2ls /usr/local/bin/gcc* # Intel Mac
ls /opt/homebrew/bin/gcc* # Apple Silicon Mac
確定了 GCC 的確切版本號(例如 gcc-11),可以使用該版本號的 GCC 編譯您的程式碼。 例如,如果 GCC 版本是 11,則執行:1
2
3
4g++-11 example.cpp -o Example
# 如果你想使用特定版本的c++編譯(例如c++11),可以執行
g++-11 example.cpp -o example -std=c++11
在 VSCode 中使用 GCC
使用 C/C++ Compile Run 插件
進入到插件設定頁面,搜尋 C-cpp-compile-run: Cpp-compiler
,設定使用 gcc 編譯。
使用 Competitive Programming Helper (cph) 插件
進入到插件設定頁面,搜尋 cph.language.cpp.Command
,設定使用 gcc 編譯。
結語
這樣就可以在 MacOS 上使用 <bits/extc++.h>
標頭檔了,可以試試底下這個程式碼能否正常運行:1
2
3
4
5
6
7
8
9
10
11
12
using namespace __gnu_pbds;
using namespace std;
int main() {
tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> s;
s.insert(1);
s.insert(3);
cout << *s.find_by_order(1) << '\n'; // 輸出第二個元素(3)
return 0;
}
如果對在 MacOS 上使用 GCC 和 <bits/extc++.h> 標頭檔有任何問題,歡迎在下方留言討論。