M1芯片MacBookPro安装pg gem 1.2.3遇编译错误求助
针对M1 MacBook Pro安装pg gem 1.2.3的问题解答
1. M1芯片上安装pg 1.2.3的正确ARCHFLAGS命令
pg 1.2.3是2020年的老版本,完全没有适配ARM64架构,必须强制用x86_64架构编译,同时搭配x86_64版本的libpq依赖才能解决编译错误:
- 先打开Rosetta 2终端:右键终端图标→显示简介→勾选「使用Rosetta打开」
- 安装x86_64版本的libpq:
arch -x86_64 brew install libpq - 执行带ARCHFLAGS的gem安装命令,指定x86_64架构和x86版本的libpq配置路径:
ARCHFLAGS="-arch x86_64" gem install pg -v 1.2.3 -- --with-pg-config=/usr/local/opt/libpq/bin/pg_config
你之前用$(uname -m)会得到arm64,而pg 1.2.3不支持这个架构,所以才会出现rb_cData未定义的编译错误——这个符号是Ruby在ARM架构下的内部定义,老版本pg gem的代码里完全没适配。
2. 是否必须使用ARCHFLAGS参数?
对于pg 1.2.3这类不支持ARM64的老版本,必须用ARCHFLAGS指定x86_64。原因很直接:
- 该版本的gem源码中没有针对ARM架构的编译逻辑,直接编译会找不到Ruby ARM版本的内部符号(比如你遇到的
rb_cData) - 只有强制切换到x86_64架构,才能让gem在Rosetta模拟的x86环境下编译,匹配老版本的代码逻辑
而像pg 1.5.3这类新版本,官方已经适配了ARM64,不需要ARCHFLAGS,直接安装就能正常运行。
3. pg 1.2.3和1.5.3的版本差异影响
两者的差异主要体现在兼容性、功能和安全性上:
- Ruby/PostgreSQL版本兼容:
- pg 1.2.3最高支持Ruby 2.7,对PostgreSQL 13+的兼容性差,可能出现连接或查询异常
- pg 1.5.3支持Ruby 3.0~3.3,完美兼容PostgreSQL 10~16的所有特性
- 功能与稳定性:
- 1.5.3新增了异步查询、管道查询、PostgreSQL 14+的JSONB操作优化等功能
- 修复了大量内存泄漏、连接池异常的bug
- 安全性:
- 1.2.3存在多个已修复的安全漏洞(比如部分SQL注入风险、连接劫持漏洞),新版本已全部修补
- API兼容性:pg gem的核心API(连接、查询、结果处理)非常稳定,只要你的项目没有用到1.2.3的冷门私有API,升级到1.5.3基本不需要改动代码
内容的提问来源于stack exchange,提问作者J.R. Bob Dobbs
相关产品推荐
相关产品推荐

