gcc 如何在Mac OS中将g++配置为默认编译器(M1)

sulc1iza  于 2023-01-09  发布在  Mac
关注(0)|答案(1)|浏览(440)

所以,我想使用一些GNU C++自带的头文件:

#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

我读到在MacOS中,gcc和g++都链接到clang。所以,我们不得不使用homebrew安装gcc并使用它。但是在使用homebrew安装gcc之后。当我运行

g++ --version

我得到

Apple clang version 12.0.5 (clang-1205.0.22.9)
Target: arm64-apple-darwin22.1.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

但是运行g++-12 --version,我得到:

g++-12 (Homebrew GCC 12.2.0) 12.2.0
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

我的VSCode运行G++(Apple One)来编译C/C文件。对于我一开始想要完成的目标,我读到我们需要让G(使用自制程序安装)来进行编译。
因此,我运行了以下命令:

cd /opt/homebrew/bin
ls -s g++-12 g++

但是现在,即使我编译下面的代码:

#include <iostream>
int main()
{
  std::cout << 1;
}

出现以下错误:

In file included from /opt/homebrew/Cellar/gcc/12.2.0/include/c++/12/bits/postypes.h:40,
                 from /opt/homebrew/Cellar/gcc/12.2.0/include/c++/12/iosfwd:40,
                 from /opt/homebrew/Cellar/gcc/12.2.0/include/c++/12/ios:38,
                 from /opt/homebrew/Cellar/gcc/12.2.0/include/c++/12/ostream:38,
                 from /opt/homebrew/Cellar/gcc/12.2.0/include/c++/12/iostream:39,
                 from test.cpp:1:
/opt/homebrew/Cellar/gcc/12.2.0/include/c++/12/cwchar:44:10: fatal error: wchar.h: No such file or directory
   44 | #include <wchar.h>
      |          ^~~~~~~~~
compilation terminated.

现在,使用rm g++删除链接会恢复到我的原始配置,但是该配置无法运行我在开始时请求的头文件,有什么方法可以解决这个问题吗?
上面的大部分都是从here中提取的。但是我没有找到任何解决方案。但是,我看到人们使用相同的和getting successful
编辑:我找到了一个网站,那里有一个解决方案。它是编译不使用g++。而是使用

g++-12 --sysroot=$(xcrun --show-sdk-path)

当我使用这个的时候,它解决了问题,有人能解释一下为什么会发生这种情况吗?

hxzsmxv2

hxzsmxv21#

标头错误可能表示您通过Homebrew安装的g++可能与macos系统目录中安装的Apple Xcode版本不兼容。
解决方案可能是重新安装一个或两个软件包。
EDIT:g++-12 --sysroot=$(xcrun --show-sdk-path)将系统头文件包含的搜索路径从默认值(可能是在homebrew安装g++时设置的)更改为当前安装的Xcode SDK提供的路径。

相关问题