换了m2的mac后一直没注意本地homebrew和anaconda都是x86架构的,所以导致这两周在处理c++编译的时候出现了很多匪夷所思的问题,记录一下解决方案📝
在终端输入以下命令是告诉你的电脑的架构是什么,我的电脑输出就是arm64
arch
如果是arm,则需要保证本地的homebrew和miniconda是arm版本的;
ARM 版 Homebrew 是必须安装在 /opt/homebrew 下的,具体做法参考链接:https://sspai.com/post/63935,里面给出了很具体的说明;
homebrew的安装我是参考了知乎里苹果电脑常规安装脚本,把下面命令在终端运行即可:
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
安装gcc
brew install gcc@12
然后稍等,只要brew安装过程中命令行没出现什么error的红字就应该没问题,我的安装路径是:/opt/homebrew/Cellar/gcc/12.2.0
进入这个目录后,你可以看到有很多文件夹,像bin、include,我检验自己是不是下到arm架构的gcc的方法就是看有没有aarch64-apple-darwin21的文件夹,有的话就下对了。
setuptools下实现gcc编译C extension
因为苹果电脑的默认编译器是clang,而我的项目中涉及到的头文件必须由gcc编译;但这个setuptools的文档比较抽象,且每次python setup.py install都自动用本地clang(这卡了好久…),所以我们需要加一些选项来让setuptools模块知道我们使用gcc编译,成功的方法如下,在命令行分别输入
export CC='gcc-12'
export CXX='g++-12'
python3 setup.py install
这样就会自动用gcc、g++编译,大功告成!
这样也无需做软链接,是比较灵活的方案