Ошибка архива i386 при установке старой версии scrypt gem с OS X Mojave - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь установить старую версию gem для старого проекта после новой установки OS X 10.14 Mojave и инструментов командной строки XCode.Gem, который я пытаюсь установить, это scrypt, версия 1.2.1, которая зависит от authlogic.

gem install scrypt -v = 1.2.1

Возвращает следующую ошибку:

Building native extensions. This could take a while...
ERROR:  Error installing scrypt:
    ERROR: Failed to build gem native extension.

    current directory: /Users/chris/.rvm/gems/ruby-2.4.4@rails5/gems/scrypt-1.2.1/ext/scrypt
/Users/chris/.rvm/rubies/ruby-2.4.4/bin/ruby -rrubygems /Users/chris/.rvm/gems/ruby-2.4.4@global/gems/rake-12.0.0/exe/rake RUBYARCHDIR=/Users/chris/.rvm/gems/ruby-2.4.4@rails5/extensions/x86_64-darwin-18/2.4.0/scrypt-1.2.1 RUBYLIBDIR=/Users/chris/.rvm/gems/ruby-2.4.4@rails5/extensions/x86_64-darwin-18/2.4.0/scrypt-1.2.1
mkdir -p x86_64-darwin
gcc -fexceptions -O -fno-omit-frame-pointer -fno-strict-aliasing -Wall -msse -msse2 -arch x86_64 -arch i386   -o x86_64-darwin/crypto_scrypt-sse.o -c ./crypto_scrypt-sse.c
gcc -fexceptions -O -fno-omit-frame-pointer -fno-strict-aliasing -Wall -msse -msse2 -arch x86_64 -arch i386   -o x86_64-darwin/memlimit.o -c ./memlimit.c
gcc -fexceptions -O -fno-omit-frame-pointer -fno-strict-aliasing -Wall -msse -msse2 -arch x86_64 -arch i386   -o x86_64-darwin/scrypt_calibrate.o -c ./scrypt_calibrate.c
gcc -fexceptions -O -fno-omit-frame-pointer -fno-strict-aliasing -Wall -msse -msse2 -arch x86_64 -arch i386   -o x86_64-darwin/scrypt_ext.o -c ./scrypt_ext.c
gcc -fexceptions -O -fno-omit-frame-pointer -fno-strict-aliasing -Wall -msse -msse2 -arch x86_64 -arch i386   -o x86_64-darwin/scryptenc_cpuperf.o -c ./scryptenc_cpuperf.c
gcc -fexceptions -O -fno-omit-frame-pointer -fno-strict-aliasing -Wall -msse -msse2 -arch x86_64 -arch i386   -o x86_64-darwin/sha256.o -c ./sha256.c
gcc -bundle -o x86_64-darwin/libscrypt_ext.bundle x86_64-darwin/crypto_scrypt-sse.o x86_64-darwin/memlimit.o x86_64-darwin/scrypt_calibrate.o x86_64-darwin/scrypt_ext.o x86_64-darwin/scryptenc_cpuperf.o x86_64-darwin/sha256.o -fexceptions -arch x86_64 -arch i386 
ld: warning: The i386 architecture is deprecated for macOS (remove from the Xcode build setting: ARCHS)
ld: warning: ignoring file /Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/lib/libSystem.tbd, missing required architecture i386 in file /Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/lib/libSystem.tbd
Undefined symbols for architecture i386:
  "___error", referenced from:
      _crypto_scrypt in crypto_scrypt-sse.o
      _memtouse in memlimit.o
  "___stack_chk_fail", referenced from:
      _scrypt_SHA256_Transform in sha256.o
      _scrypt_SHA256_Final in sha256.o
      _HMAC_scrypt_SHA256_Init in sha256.o
      _HMAC_scrypt_SHA256_Final in sha256.o
      _PBKDF2_scrypt_SHA256 in sha256.o
  "___stack_chk_guard", referenced from:
      _scrypt_SHA256_Transform in sha256.o
      _scrypt_SHA256_Final in sha256.o
      _HMAC_scrypt_SHA256_Init in sha256.o
      _HMAC_scrypt_SHA256_Final in sha256.o
      _PBKDF2_scrypt_SHA256 in sha256.o
  "_free", referenced from:
      _crypto_scrypt in crypto_scrypt-sse.o
  "_getrlimit$UNIX2003", referenced from:
      _memtouse in memlimit.o
  "_gettimeofday", referenced from:
      _scryptenc_cpuperf in scryptenc_cpuperf.o
  "_malloc", referenced from:
      _crypto_scrypt in crypto_scrypt-sse.o
  "_memcpy", referenced from:
      _scrypt_SHA256_Update in sha256.o
      _PBKDF2_scrypt_SHA256 in sha256.o
  "_mmap$UNIX2003", referenced from:
      _crypto_scrypt in crypto_scrypt-sse.o
  "_munmap$UNIX2003", referenced from:
      _crypto_scrypt in crypto_scrypt-sse.o
  "_sysconf", referenced from:
      _memtouse in memlimit.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
rake aborted!
Command failed with status (1): [gcc -bundle -o x86_64-darwin/libscrypt_ext...]
/Users/chris/.rvm/gems/ruby-2.4.4@rails5/gems/ffi-compiler-1.0.1/lib/ffi-compiler/compile_task.rb:153:in `block in define_task!'
/Users/chris/.rvm/gems/ruby-2.4.4@global/gems/rake-12.0.0/exe/rake:27:in `<main>'
Tasks: TOP => default => x86_64-darwin/libscrypt_ext.bundle
(See full trace by running task with --trace)

rake failed, exit code 1

Ответы [ 3 ]

0 голосов
/ 03 февраля 2019

Установка инструментов командной строки для 10.13 исправила это для меня.

0 голосов
/ 12 апреля 2019

У меня возникла именно эта проблема.

Я использую Mojave (10.14.4) и версию 10.2 инструментов командной строки XCode, и при запуске gem install scrypt -v 1.2.1 я получаю точно такую ​​же ошибкукак описано выше.

Решением было установить этот пакет: /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg (как описано в Не удается скомпилировать программу C на Mac после обновления до Mojave ).Очевидно, корень проблемы заключался в том, что где-то в этом процессе (bundler? Scrypt?) Ожидалось, что заголовочные файлы могут быть найдены в /usr/include.Последняя версия XCode не размещает заголовочные файлы в этом месте, но запуск пакета помещает их туда (как описано в примечаниях к выпуску XCode )

0 голосов
/ 05 декабря 2018

Похоже, архитектура i386 устарела и удалена для самой новой версии macOS.Есть еще как минимум 2 варианта, которые могут работать для вас, при условии, что вы не можете обновить scrypt версию (что, вероятно, является лучшим вариантом)

  • Использовать образ докера.Я только что протестировал ruby:2.5.3-slim, и вам нужно всего лишь запустить apt-get update && apt-get build-essential && gem install scrypt -v 1.2.1
  • . Загрузите старый SDK, который включает архитектуру i386, и установите его в своей системе. В этом есть некоторые ссылки и информация, которые могут быть полезны (хотя и не относятся к рельсам)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...