我在 GNU/Linux (Debian) 下编写一个简单的程序已经有一段时间了,最近我想在新的 M1 芯片上运行的 macOS 下尝试一下。然而,g++ 拒绝运行它并抛出很多的错误。 Debian下的g++完全没有问题。 AFAIK,所有依赖项都已得到满足,所以我不明白为什么它无法运行。
我的代码摘录(两种方法;还有更多,但这就是我可以分享的全部内容):
#include <unistd.h>
uint64_t constexpr mix(char m, uint64_t s)
{
return ((s << 7) + ~(s >> 3)) + ~m;
}
uint64_t constexpr hashIt(const char* m)
{
return (*m) ? mix(*m, hashIt(m + 1)) : 0;
}
g++ 返回以下内容:
main2.cpp:3:19: error: expected ';' after top level declarator
uint64_t constexpr mix(char m, uint64_t s)
^
;
1 error generated.
它在 Debian 以及任何其他发行版下都能完美运行。
感谢您的任何答复!
编辑:我运行brew install gcc
并成功安装了该软件包。但是,它不在通常目录中的任何位置 ( /usr/local/bin, /usr/local/Cellar
.)
答案1
当使用 Homebrew 包管理器在 macOS 上安装 GNU 编译器集合 (GCC) 时brew install gcc
,g++
可执行文件将被调用g++-11
,其中11
将是与最新版本的 GCC 相对应的一些数字。
这是为了允许同时安装多个版本的 GCC,例如通过brew install gcc@9
安装版本 9,并且还允许g++
在没有数字的情况下保留 Apple 的别名clang++
。
因此,在您的情况下,安装该gcc
包并用作g++-11
C++ 编译,clang++
macOS 上的编译器不支持您的代码。