上回我们提到苹果推送的开发者工具更新疑似导致头文件加载不能,在加上CPLUS_INCLUDE_PATH=/opt/homebrew/include这个环境变量后就可以正常编译。然而果然不出所料,这个编译结果是无法正常跑起来的。而在手动运行node-gyp rebuild后可以发现,这个环境变量使构建系统试图使用ARM架构的文件来构建x86目标,结果当然是相关文件没有实际使用在编译中,最终生成出来的文件自然就不包含x64架构下的对应代码。

回头深究,发现之前有一个严重的前提错误,就是头文件并不总是在/usr/local/include中,在Apple Silicon上,头文件和链接库会放在另一个位置。

目前比较有效的方法可能是同时使用x64版本的brew和ARM版的brew。不过,由于x64架构的程序可以在Rosetta转译后运行,并且node-gyp在编译时似乎默认选择x64目标,所以安装x64的brew可能是更合理偷懒的选择。

上回的整篇文章是没有深入了解编译、构建导致的乌龙。虽然在这篇文章之后不久就发现问题并起草了这篇文章,但是由于种种原因迟迟没有发布。(众所周知我们连着咕了4个多月)那篇文章也就放着给自己留个教训罢。