Архитектура ARM64 (чип M1): невозможно установить pg gem (с помощью PostgresApp)
Я пытался установить проект рельсов на свой компьютер (Macbook Pro 2020 с M1) под управлением Big Sur.
У меня установлен 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 */
Есть идеи, как это решить?
3 ответа
Я столкнулся с той же проблемой с M1 + драгоценным камнем ruby pg. Проблема заключалась в том, что в моей системе было сочетание двоичных файлов ARM + x86, и
pg
очевидно, в настоящее время может быть скомпилирован только с x86. К вашему сведению, в его репозитории на github сообщается о новых проблемах, поэтому, надеюсь, они скоро будут решены здесь.
Моя работа:
удалите homebrew + rbenv на базе ARM и удалите свой
.gem
+.rbenv
каталоги из вашего домашнего каталога (инструкции по удалению homebrew )переустановите homebrew как x86 на базе Intel
$ 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
- повторно соберите свой проект и наслаждайтесь Ruby на rosetta 2 (пока)
$ bundle install
$ rails s
Для тех, кто только пытается установить гем pg и не заботится о PostgresApp, ключом к исправлению pg на M1 является обеспечение существования
libpq
. Эти шаги позволили мне установить pg gem на мой Mac M1, не прибегая к использованию версии x86 или флагов сборки:
brew install libpq
export PATH="/opt/homebrew/opt/libpq/bin:$PATH"
gem install pg
Я успешно установил pg gem с Ruby 2.7 на macOS M1(12 Monterey), у меня установлены как x86, так и arm64 brew. Поскольку pg должен быть скомпилирован с x86 libpq, я установил libpq с x86 brew
❯ 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)