如何让macOS上的Ruby C扩展编译为Intel与ARM通用架构?
让Ruby C扩展在macOS生成兼容x86_64和arm64的通用bundle文件
要生成同时兼容Intel和ARM架构的macOS通用二进制文件,你需要调整编译参数,让编译器同时输出两种架构的代码,具体操作如下:
修改extconf.rb文件
在你的extconf.rb中添加针对macOS平台的编译和链接架构配置,确保编译器同时处理x86_64和arm64:if RUBY_PLATFORM.include?('darwin') # 添加双架构编译参数 $CFLAGS += ' -arch x86_64 -arch arm64' $LDFLAGS += ' -arch x86_64 -arch arm64' end清理旧编译产物并重新编译
先清理之前生成的单架构文件,再重新执行编译流程:make clean ruby ./extconf.rb make验证结果
编译完成后,用以下命令检查bundle文件的架构支持:lipo -archs xxx.bundle输出应该包含
x86_64和arm64两个架构,说明通用二进制文件生成成功。
注意:如果你的Ruby环境是通过Rosetta运行的x86_64版本,上述配置依然有效——编译器会自动交叉编译生成arm64架构的代码并合并。确保你的Xcode命令行工具是最新版本,以支持双架构编译。
内容的提问来源于stack exchange,提问作者enumag
相关产品推荐
相关产品推荐

