1

I'm trying to install an old gem version for an old project after a fresh install of OS X 10.15 Catalina and XCode Command Line Tools and Xcode 11.0. The gem I'm trying to install is scrypt, version 1.2.1, which is a dependency of authlogic.

gem install scrypt -v '1.2.1'

This gem is used under the hood of another gem casein. So I can't update scrypt directly inside my Gemfile.

Returns the following error:

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

    current directory: /Users/sergiypetrenko/.rvm/gems/ruby-2.3.8/gems/scrypt-1.2.1/ext/scrypt
/Users/sergiypetrenko/.rvm/rubies/ruby-2.3.8/bin/ruby -rrubygems /Users/sergiypetrenko/.rvm/gems/ruby-2.3.8/gems/rake-13.0.0/exe/rake RUBYARCHDIR\=/Users/sergiypetrenko/.rvm/gems/ruby-2.3.8/extensions/x86_64-darwin-19/2.3.0/scrypt-1.2.1 RUBYLIBDIR\=/Users/sergiypetrenko/.rvm/gems/ruby-2.3.8/extensions/x86_64-darwin-19/2.3.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 -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/MacOSX.sdk/usr/lib/libSystem.tbd, missing required architecture i386 in file /Library/Developer/CommandLineTools/SDKs/MacOSX.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/sergiypetrenko/.rvm/gems/ruby-2.3.8/gems/ffi-compiler-1.0.1/lib/ffi-compiler/compile_task.rb:153:in `block in define_task!'
/Users/sergiypetrenko/.rvm/gems/ruby-2.3.8/gems/rake-13.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

The main solution on OS X 10.14 Mojave for me was to install this package /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg . But for now Apple decided to remove /usr/include in Catalina. The reason is Xcode now supports multiple SDKs and multiple installations of Xcode.

Reference to similar issues: Installing old scrypt gem on OS Mojave

MacOS Catalina cannot find /usr/include file

Serj Petrenko
  • 51
  • 2
  • 5
  • I'm going to guess it's because Catalina doesn't support 32-bit applications anymore. – anothermh Oct 22 '19 at 23:10
  • 1
    @anothermh As I understood it's not only because Catalina doesn't support 32-bit applications anymore, on Mojave I had the same issue and it was solved by installing this package `/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg`. – Serj Petrenko Oct 23 '19 at 06:44
  • Apparently the root of the issue on OS Mojave was that somewhere in this process (bundler? scrypt?) there was an expectation that header files could be found in `/usr/include`. The latest version of XCode does not place header files in that location, because OS Catalina Apple decided to remove `/usr/include`. – Serj Petrenko Oct 23 '19 at 06:45
  • As a quick fix, I copied to my computer gem `casein` that use gem `scrypt` inside then updated version of `scrypt` to `3.0.6` and added in Gemfile of the main project path to folder with gem. – Serj Petrenko Oct 23 '19 at 11:56

0 Answers0