ARM64架构(M1芯片):无法安装pg gem(使用PostgresApp)

     2023-02-16     95

关键词:

【中文标题】ARM64架构(M1芯片):无法安装pg gem(使用PostgresApp)【英文标题】:ARM64 architecture (M1 chip): Cannot install pg gem (using PostgresApp) 【发布时间】:2021-04-24 20:35:50 【问题描述】:

我一直在尝试在运行 Big Sur 的计算机(带有 M1 的 Macbook Pro 2020)上安装一个 rails 项目。

我已经安装了 PostgresApp。

运行bundle install 时,它无法构建pg gem,所以我尝试手动安装gem(通过执行gem install pg - 也尝试使用gem install pg -- --with-pg-config=/Applications/Postgres.app/Contents/Versions/10/bin/pg_config)。

我收到一条错误消息:

ERROR:  Error installing pg:
ERROR: Failed to build gem native extension.

Can't find the PostgreSQL client library (libpq)
*** extconf.rb failed ***

检查错误日志时,我看到:

have_library: checking for PQconnectdb() in -lpq... -------------------- no

ld: warning: ignoring file /Applications/Postgres.app/Contents/Versions/13/lib/libpq.dylib, building for macOS-arm64 but attempting to link with file built for macOS-x86_64
Undefined symbols for architecture arm64:
  "_PQconnectdb", referenced from:
      _t in conftest-db479f.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
checked program was:
/* begin */
 1: #include "ruby.h"
 2:
 3: #include <libpq-fe.h>
 4:
 5: /*top*/
 6: extern int t(void);
 7: int main(int argc, char **argv)
 8: 
 9:   if (argc > 1000000) 
10:     printf("%p", &t);
11:   
12:
13:   return 0;
14: 
15: int t(void)  void ((*volatile p)()); p = (void ((*)()))PQconnectdb; return !p; 
/* end */

知道如何解决这个问题吗?

【问题讨论】:

你需要使用 Postgres.app 吗?我遇到了同样的问题。我删除了它并使用了 postgres 的自制版本。效果很好。 @IngmarasKeleras 是的,原生版本在 MacOS 中存在一些排序问题。 【参考方案1】:

对于那些只是尝试安装 pg gem 并且不关心 PostgresApp 的人,在 M1 上修复 pg 的关键是确保 libpq 的存在。这些步骤允许我在我的 M1 mac 上安装 pg gem,而无需使用 x86 版本或构建标志:

brew install libpq
export PATH="/opt/homebrew/opt/libpq/bin:$PATH"
gem install pg

【讨论】:

这应该是公认的答案。 这对我有用!同意这应该是公认的答案。【参考方案2】:

在 brew PostgreSQL 上遇到了同样的问题,但是我在 macOS M1(12 Monterey) 上使用 Ruby 2.7 成功安装了 pg gem,我同时安装了 x86 和 arm64 brew。由于pg必须用x86 libpq编译,所以我用x86 brew安装了libpq


❯ which brow
brow: aliased to arch --x86_64 /usr/local/Homebrew/bin/brew

❯ brow install libpq

❯ brew install PostgreSQL # Install arm64 PostgreSQL 
❯ brew services start postgresql
❯ ps -ef | grep postgresql
  501 23655     1   0  2:29PM ??         0:00.10 /opt/homebrew/opt/postgresql/bin/postgres -D /opt/homebrew/var/postgres

❯ which brew
/opt/homebrew/bin/brew
❯ brew -v
Homebrew 3.3.2-50-geca16a2
Homebrew/homebrew-core (git revision ec99d74792c; last commit 2021-11-05)
Homebrew/homebrew-cask (git revision 2ab51af9c3; last commit 2021-11-05)

然后我可以安装 pg gem

❯ ruby -v
ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-darwin19]

❯ gem install pg -v 1.2.3 -- --with-pq-dir=/usr/local/Cellar/libpq/13.3
Building native extensions with: '--with-pq-dir=/usr/local/Cellar/libpq/13.3'
This could take a while...
Successfully installed pg-1.2.3
Parsing documentation for pg-1.2.3
Done installing documentation for pg after 0 seconds

但是 Ruby 2.6 失败了,我不知道为什么

gem install pg -v 1.2.3 -- --with-pq-dir=/usr/local/Cellar/libpq/13.3
Building native extensions with: '--with-pq-dir=/usr/local/Cellar/libpq/13.3'
This could take a while...
ERROR:  Error installing pg:
    ERROR: Failed to build gem native extension.

    current directory: /Users/felix/.rvm/gems/ruby-2.6.6/gems/pg-1.2.3/ext
/Users/felix/.rvm/rubies/ruby-2.6.6/bin/ruby -I /Users/felix/.rvm/rubies/ruby-2.6.6/lib/ruby/site_ruby/2.6.0 -r ./siteconf20211105-41969-1oxcuyy.rb extconf.rb --with-pq-dir\=/usr/local/Cellar/libpq/13.3
checking for pg_config... yes
Using config values from /opt/homebrew/bin/pg_config
checking for libpq-fe.h... yes
checking for libpq/libpq-fs.h... yes
checking for pg_config_manual.h... yes
checking for PQconnectdb() in -lpq... no
checking for PQconnectdb() in -llibpq... no
checking for PQconnectdb() in -lms/libpq... no
Can't find the PostgreSQL client library (libpq)

2021 年 11 月 6 日更新

使用 Ruby 2.6 也成功安装了 pg。

    首先安装 x86 postgresql
# build Postgresql from source, as 
# Error: postgresql: no bottle available! 
# You can try to install from source with:  
# brew install --build-from-source postgresql


brow install --build-from-source postgresql

    安装带有前缀的pg gem
gem install pg -v 1.2.3 -- --with-pg_config=/usr/local/Cellar/postgresql/13.3/bin/pg_config --with-pq-dir=/usr/local/Cellar/libpq/13.3 

【讨论】:

【参考方案3】:

我在使用 M1 + ruby​​ pg gem 时遇到了同样的问题。问题是我的系统上混合了 ARM + x86 二进制文件,而 pg 目前显然只能用 x86 编译。仅供参考,在其 github 存储库中报告了新问题,因此希望它会尽快得到解决 here

我的解决方法:

    卸载基于 ARM 的 homebrew + rbenv 并从你的主目录中删除你的 .gem + .rbenv 目录 (homebrew uninstall instructions)

    将自制软件重新安装为基于 x86 英特尔的

$ arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
    将 rbenv 安装为 x86(或任何您喜欢的 ruby​​ 版本管理器)
$ arch -x86_64 brew install rbenv
$ arch -x86_64 rbenv install 2.7.2
    (可选)对于 postgres.app,您可以预先配置 pg-config 所在的位置,这样您就不必在它阻塞时运行手动 gem 安装。例如
$ bundle config build.pg- --with-pg-config=/Applications/Postgres.app/Contents/Versions/latest/bin/pg_config
    重新捆绑您的项目并在 Rosetta 2 上享受 ruby​​(目前)
$ bundle install
$ rails s

【讨论】:

我最终安装了本机 postgres(不希望 ruby​​ 因性能问题而“模拟”运行)。我会等到 postgres.app 发布 ARM64 版本:) @Tiago 我问了一个关于这个的问题,希望我不必求助于使用自制软件安装 postgres。我想我也会这样做。我当前的实例在一台使用了 10 年的 High Sierra 计算机上,所以我想将它移到我的 M1 计算机上。 Postgres.app 现在发布了一个测试版 arm 版本:github.com/PostgresApp/PostgresApp/releases/tag/v2.5beta1,pg gem 现在安装了!

带有 M1 芯片的 Macmini 的 Xcode 抛出 arm64 架构错误

】带有M1芯片的Macmini的Xcode抛出arm64架构错误【英文标题】:Xcodethrowingarm64architectureerrorforMacminiwithM1chip【发布时间】:2021-05-2108:36:51【问题描述】:我在使用带有M1芯片的AppleNewMacmini的XCode中遇到了一些问题。在我的应用程序中,... 查看详情

在arm架构的mac上安装sqlserver(m1芯片orm2芯片)(代码片段)

在arm架构的mac上安装sqlserver由于Mac最新的芯片使用了arm架构的缘故Sqlserver和Mac的兼容相当差,以至于无法在Mac的docker上启动在m1芯片上很多方法试试还是可以的但是m2就几乎行不通了尝试了很多命令,无果,最终还是... 查看详情

基于m1(arm)架构的java8环境(代码片段)

文章目录基于M1(arm)架构的Java8环境1.环境说明2.安装步骤2.1下载2.2傻瓜式下一步安装2.3验证安装基于M1(arm)架构的Java8环境1.环境说明M1zulu8.56.0.23-ca-jdk8.0.302-macosx_aarch64zsh2.安装步骤2.1下载官网:https://www.azul.com/downloads/?package=j... 查看详情

梳理m1芯片macmini执行podinstall失败ruby直接崩

...番折腾,知道是ffi相关包执行X86指令集,需要适配M1芯片架构,即arm64指令集主要涉及Ruby版本,我系统版本MacOS12.3.1,ruby版本系统自带2.6.8,升级ruby会涉及其他软件包,gem等,皆升级到最新。此时Ruby升级为3.0.0,再次安装pod,问... 查看详情

安装 pg gem;错误:无法构建 gem 原生扩展

】安装pggem;错误:无法构建gem原生扩展【英文标题】:Installingpggem;ERROR:Failedtobuildgemnativeextension【发布时间】:2013-11-0114:07:33【问题描述】:更新到OSX10.9Mavericks后,我尝试启动Rails3应用程序,但无法连接到PG数据库。检查PGAdminI... 查看详情

无法安装 pg gem

】无法安装pggem【英文标题】:unabletoinstallpggem【发布时间】:2011-06-1703:49:37【问题描述】:我尝试使用geminstallpg,但它似乎不起作用。geminstallpg给出这个错误TemporarilyenhancingPATHtoincludeDevKit...Buildingnativeextensions.Thiscouldtakeawhile...ERR... 查看详情

node-sass和dart-sass区别(以及解决m1芯片/arm芯片无法使用node-sass的问题)

...版本中可以找到答案可以看到都macOSX系统仅仅支持x64而M1芯片是arm64并不是x86。也就是说如果我们的nodejs环境若为使用rosetta转译运行的x8664位nodejs版本,那么就可以使用这个node-sass并且不会报错。所以网上有些人说让回退nodejs版... 查看详情

MacOs (M1 Arm64) 无法加载 Nokogiri - 使用系统默认 Ruby

】MacOs(M1Arm64)无法加载Nokogiri-使用系统默认Ruby【英文标题】:MacOs(M1Arm64)unabletoloadNokogiri-UsingsystemdefaultRuby【发布时间】:2021-12-1618:54:48【问题描述】:我可以在这里使用一些帮助。我正在设置新的2020MacbookProM1。我已经完成了在Ma... 查看详情

Rails 3 - 无法安装 pg gem

】Rails3-无法安装pggem【英文标题】:Rails3-can\'tinstallpggem【发布时间】:2012-03-2822:50:48【问题描述】:当我尝试运行捆绑(捆绑安装)时,我总是得到Installingpg(0.13.2)withnativeextensionsGem::Installer::ExtensionBuildError:ERROR:Failedtobuildgemnative... 查看详情

Xcode 12 Apple M1 arm64 - 可设计错误:“错误的架构”

】Xcode12AppleM1arm64-可设计错误:“错误的架构”【英文标题】:Xcode12AppleM1arm64-Designableerror:"wrongarchitecture"【发布时间】:2020-12-1407:57:22【问题描述】:在基于AppleSilicon的机器上使用Interfacebuilder时,我当前的项目会引发IBDe... 查看详情

无法使用 Mavericks 在我的 Mac 上安装 PG gem

】无法使用Mavericks在我的Mac上安装PGgem【英文标题】:ImpossibletoInstallPGgemonmymacwithMavericks【发布时间】:2013-11-0616:13:12【问题描述】:我正在尝试安装pggem,以便再次使用我的rails项目。但我得到这个错误:构建原生扩展。这可能... 查看详情

详细步骤m1macbookpro安装oraclejdk11arm版(代码片段)

...ookPro安装OracleJdk11arm版M1MacBookPro安装OracleJdk11arm版1.下载arm架构jdk11(dmg程序自动安装)1.1下载dmg格式jdk安装包2.下载arm架构jdk11(tar包手动安装)1.1下载tar.gz格式jdk安装包1.下载arm架构jdk11(dmg程序自动安装)... 查看详情

mac电脑m1m2cocoapods问题(代码片段)

...f0c;苹果正式发布第一款用于Mac的自研电脑芯片M1。由于ARM架构的原因,目前还有相当一部分未升级ARM架构支持的Mac软件无法在M1芯片的Mac电脑上运行。如果你的应用是通用型的应用出现不兼容问题可以「勾选使用Rosetta打开」&... 查看详情

电脑是苹果m1芯片的,安装的pd虚拟机win11安装好后进入win系统安装不了软件?

...提示无效序列号怎么处理参考技术A因为,m1类的cpu,是arm架构的,你安装时就知,许多软件不一定兼容指令集的,PD17.1,是虚拟机,它运行是转换指令的,故你ERP注册,不兼容绑定注册码的。希望能够帮到你 参考技术B因为,m1类的... 查看详情

基于m1(arm)架构的vue2环境(代码片段)

文章目录1.环境说明2.安装步骤踩坑:使用yarn全局安装vue-cli成功,但是vue命令无法识别,需要手动配置环境变量。npm安装vue-cli失败,网络连接不稳定导致安装失败,采用配置cnpm全局安装vue-cli成功,无需再配置... 查看详情

我无法在 R 中的 M1 Mac 上使用 keras 中的功能,它要求我安装 arm64e 版本的 miniconda3。该怎么办?

】我无法在R中的M1Mac上使用keras中的功能,它要求我安装arm64e版本的miniconda3。该怎么办?【英文标题】:IamnotabletousefunctionsinkerasonM1MacinRanditisaskingmetoinstallarm64eversionofminiconda3.Whattodo?【发布时间】:2021-12-2204:10:58【问题描述】:\'... 查看详情

软件及环境-arm系列

flutter-macos(M1)开发环境搭建查看本机IP-M1基于M1(arm)架构的vue2环境终端设置-M1homebrew&git安装-M1基于M1(arm)架构的Node环境基于M1(arm)架构的Maven3环境基于M1(arm)架构的Java8环境 查看详情

Rails:在 OS X 上安装 PG gem - 无法构建本机扩展

】Rails:在OSX上安装PGgem-无法构建本机扩展【英文标题】:Rails:InstallingPGgemonOSX-failuretobuildnativeextension【发布时间】:2013-10-1605:43:19【问题描述】:似乎很多其他人在安装pggem时遇到了问题。为其他人提出的解决方案都不适合我。... 查看详情