Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

i386 arch error installing old scrypt gem version with OS X Mojave

I'm trying to install an old gem version for an old project after a fresh install of OS X 10.14 Mojave and XCode Command Line Tools. 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

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/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
like image 909
go minimal Avatar asked Nov 28 '18 21:11

go minimal


4 Answers

I was experiencing this exact problem.

I'm running Mojave (10.14.4) and Version 10.2 of the XCode Command Line Tools, and when running gem install scrypt -v 1.2.1, I was getting the exact same error as described above.

The solution was to install this package: /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg (as described in Can't compile C program on a Mac after upgrade to Mojave). Apparently the root of the issue 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, but running the package places them there (as documented in the XCode release notes)

like image 165
Matt31415 Avatar answered Nov 01 '22 18:11

Matt31415


Installing the command line tools for 10.13 fixed this for me.

like image 25
gpeng Avatar answered Nov 01 '22 19:11

gpeng


It looks like the i386 architecture is deprecated & removed for the newest version of macOS. There are still at least 2 options that might work for you, assuming you're unable to upgrade your scrypt version (which is probably the best option)

  • Use a docker image. I just tested with ruby:2.5.3-slim, and you only need to run apt-get update && apt-get build-essential && gem install scrypt -v 1.2.1
  • Download the older SDK, which includes the i386 architecture, and install it on your system. This has some links and info that might be useful (though not rails-specific)
like image 2
Jay Dorsey Avatar answered Nov 01 '22 19:11

Jay Dorsey


I tried all the versions of answers given, it did not exactly do the job for me. Then the following steps worked for me.

First check if the header files are present.

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

As the headers were not present, I removed CommandLineTools, like given in this answer

sudo rm -rf /Library/Developer/CommandLineTools

Update xcode and install the macOS_SDK_headers_for_macOS_10.14.pkg

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

Now the header files were present when I did ls /usr/include

gem install scrypt -v 1.2.1

like image 1
ChimpWithaKeyboard Avatar answered Nov 01 '22 18:11

ChimpWithaKeyboard