15 votes

Erreur d'installation de l'ancienne version de scrypt gem avec OS X Mojave.

J'essaie d'installer une ancienne version de gem pour un ancien projet après une nouvelle installation de OS X 10.14 Mojave et de XCode Command Line Tools. La gem que j'essaie d'installer est scrypt, version 1.2.1, qui est une dépendance d'authlogic.

gem install scrypt -v=1.2.1

renvoie l'erreur suivante :

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

10voto

Matt31415 Points 186

Je rencontrais exactement le même problème.

J'utilise Mojave (10.14.4) et la version 10.2 des outils de ligne de commande XCode, et lorsque j'exécute la commande gem install scrypt -v 1.2.1 J'ai obtenu exactement la même erreur que celle décrite ci-dessus.

La solution a été d'installer ce paquet : /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg (tel que décrit dans Impossible de compiler un programme C sur un Mac après la mise à niveau vers Mojave ). Apparemment, la racine du problème est que quelque part dans ce processus (bundler ? scrypt ?), on s'attend à ce que les fichiers d'en-tête se trouvent dans le répertoire /usr/include . La dernière version de XCode ne place pas les fichiers d'en-tête à cet emplacement, mais l'exécution du paquet les y place (comme indiqué dans la section les notes de mise à jour de XCode )

3voto

gpeng Points 134

Installation de la outils de ligne de commande pour 10.13 a réglé le problème pour moi.

2voto

Jay Dorsey Points 51

Il semble que l'architecture i386 soit dépréciée et supprimée pour la dernière version de macOS. Il y a encore au moins 2 options qui pourraient fonctionner pour vous, en supposant que vous ne puissiez pas mettre à jour votre scrypt (qui est probablement la meilleure option)

  • Utiliser une image Docker. Je viens de tester avec ruby:2.5.3-slim et vous n'avez qu'à exécuter apt-get update && apt-get build-essential && gem install scrypt -v 1.2.1
  • Téléchargez l'ancien SDK, qui inclut l'architecture i386, et installez-le sur votre système. Le présent contient des liens et des informations qui pourraient être utiles (bien qu'ils ne soient pas spécifiques aux chemins de fer)

1voto

J'ai essayé toutes les versions des réponses données, cela n'a pas vraiment fonctionné pour moi. Ensuite, les étapes suivantes ont fonctionné pour moi.

Vérifiez d'abord si les fichiers d'en-tête sont présents.

ls /usr/include
ls: /usr/include: No such file or directory

Comme les en-têtes n'étaient pas présents, j'ai supprimé CommandLineTools, comme indiqué dans le document cette réponse

sudo rm -rf /Library/Developer/CommandLineTools

Mettre à jour xcode et installer le pkg macOS_SDK_headers_for_macOS_10.14.pkg

xcode-select --install
open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

Les fichiers d'en-tête étaient présents lorsque j'ai fait ls /usr/include

gem install scrypt -v 1.2.1

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X