简单的cpp程序可以在标准GNU/Linux下运行,但不能在MacOS M1下运行

简单的cpp程序可以在标准GNU/Linux下运行,但不能在MacOS M1下运行

我在 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 gccg++可执行文件将被调用g++-11,其中11将是与最新版本的 GCC 相对应的一些数字。

这是为了允许同时安装多个版本的 GCC,例如通过brew install gcc@9安装版本 9,并且还允许g++在没有数字的情况下保留 Apple 的别名clang++

因此,在您的情况下,安装该gcc包并用作g++-11C++ 编译,clang++macOS 上的编译器不支持您的代码。

相关内容