# Building compiler on Mac OS

**URL:** <https://forum.crystal-lang.org/t/building-compiler-on-mac-os/4240>\
**Category:** Help & Support\
**Created:** [January 7, 2022, 7:06pm UTC](https://forum.crystal-lang.org/t/building-compiler-on-mac-os/4240 "2022-01-07T19:06:54Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![speg](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/speg/32/1318_2.png) [@speg](https://forum.crystal-lang.org/u/speg)\
**Post date:** [January 7, 2022, 7:06pm UTC](https://forum.crystal-lang.org/t/building-compiler-on-mac-os/4240/1 "2022-01-07T19:06:54Z")

</div>

Hello friends,

Excited to see 1.3 and `crystal i`. I’ve just given my first kick fo the can at compiling crystal and I almost got it! I can boot up `crystal i` just fine and do some basics. Sadly, the tests seem to fail and my actual project fails for the same reason. Something to do with SSL something or other…

```auto
speg@Steves-MacBook-Pro crystal % make std_spec compiler_spec
Using /usr/local/opt/llvm@11/bin/llvm-config [version= 11.1.0]
./bin/crystal build -D strict_multi_assign --link-flags="-L/usr/local/opt/openssl@3/lib" -Dwithout_interpreter --exclude-warnings spec/std --exclude-warnings spec/compiler --exclude-warnings spec/primitives -o .build/std_spec spec/std_spec.cr
Using compiled compiler at .build/crystal
Undefined symbols for architecture x86_64:
  "_ERR_load_crypto_strings", referenced from:
      ___crystal_main in _main.o
  "_EVP_CIPHER_block_size", referenced from:
      _*OpenSSL::Cipher#block_size:Int32 in O-penS-S-L-5858C-ipher.o
  "_EVP_CIPHER_flags", referenced from:
      _*OpenSSL::Cipher#authenticated?:Bool in O-penS-S-L-5858C-ipher.o
  "_EVP_CIPHER_iv_length", referenced from:
      _*OpenSSL::Cipher#iv_len:Int32 in O-penS-S-L-5858C-ipher.o
  "_EVP_CIPHER_key_length", referenced from:
      _*OpenSSL::Cipher#key_len:Int32 in O-penS-S-L-5858C-ipher.o
  "_EVP_CIPHER_nid", referenced from:
      _*OpenSSL::Cipher#name:String in O-penS-S-L-5858C-ipher.o
  "_EVP_MD_CTX_create", referenced from:
      _*Digest::SHA512@OpenSSL::Digest#new_evp_mt_ctx<String>:Pointer(LibCrypto::EVP_MD_CTX_Struct) in D-igest5858S-H-A-512.o
      _*Digest::SHA512@OpenSSL::Digest#dup_ctx:Pointer(LibCrypto::EVP_MD_CTX_Struct) in D-igest5858S-H-A-512.o
      _*Digest::SHA256@OpenSSL::Digest#new_evp_mt_ctx<String>:Pointer(LibCrypto::EVP_MD_CTX_Struct) in D-igest5858S-H-A-256.o
      _*Digest::SHA256@OpenSSL::Digest#dup_ctx:Pointer(LibCrypto::EVP_MD_CTX_Struct) in D-igest5858S-H-A-256.o
      _*Digest::SHA1@OpenSSL::Digest#new_evp_mt_ctx<String>:Pointer(LibCrypto::EVP_MD_CTX_Struct) in D-igest5858S-H-A-1.o
      _*Digest::SHA1@OpenSSL::Digest#dup_ctx:Pointer(LibCrypto::EVP_MD_CTX_Struct) in D-igest5858S-H-A-1.o
      _*Digest::MD5@OpenSSL::Digest#new_evp_mt_ctx<String>:Pointer(LibCrypto::EVP_MD_CTX_Struct) in D-igest5858M-D-5.o
      ...
  "_EVP_MD_CTX_destroy", referenced from:
      _*OpenSSL::Digest+@OpenSSL::Digest#finalize:Nil in O-penS-S-L-5858D-igest43.o
      _*Digest::SHA512@OpenSSL::Digest#finalize:Nil in D-igest5858S-H-A-512.o
      _*Digest::SHA512@OpenSSL::Digest#dup_ctx:Pointer(LibCrypto::EVP_MD_CTX_Struct) in D-igest5858S-H-A-512.o
      _*Digest::SHA256@OpenSSL::Digest#finalize:Nil in D-igest5858S-H-A-256.o
      _*Digest::SHA256@OpenSSL::Digest#dup_ctx:Pointer(LibCrypto::EVP_MD_CTX_Struct) in D-igest5858S-H-A-256.o
      _*Digest::SHA1@OpenSSL::Digest#finalize:Nil in D-igest5858S-H-A-1.o
      _*Digest::SHA1@OpenSSL::Digest#dup_ctx:Pointer(LibCrypto::EVP_MD_CTX_Struct) in D-igest5858S-H-A-1.o
      ...
  "_EVP_MD_block_size", referenced from:
      _*OpenSSL::Digest#block_size:Int32 in O-penS-S-L-5858D-igest.o
  "_EVP_MD_size", referenced from:
      _*OpenSSL::Digest+@OpenSSL::Digest#digest_size:Int32 in O-penS-S-L-5858D-igest43.o
      _*Digest::SHA512@OpenSSL::Digest#digest_size:Int32 in D-igest5858S-H-A-512.o
      _*Digest::SHA256@OpenSSL::Digest#digest_size:Int32 in D-igest5858S-H-A-256.o
      _*Digest::SHA1@OpenSSL::Digest#digest_size:Int32 in D-igest5858S-H-A-1.o
      _*Digest::MD5@OpenSSL::Digest#digest_size:Int32 in D-igest5858M-D-5.o
      _*OpenSSL::Digest#digest_size:Int32 in O-penS-S-L-5858D-igest.o
  "_OPENSSL_add_all_algorithms_noconf", referenced from:
      ___crystal_main in _main.o
  "_SSL_get_peer_certificate", referenced from:
      _*OpenSSL::SSL::Socket::Server@OpenSSL::SSL::Socket#peer_certificate:(OpenSSL::X509::Certificate | Nil) in O-penS-S-L-5858S-S-L-5858S-ocket5858S-erver.o
      _*OpenSSL::SSL::Socket::Client@OpenSSL::SSL::Socket#peer_certificate:(OpenSSL::X509::Certificate | Nil) in O-penS-S-L-5858S-S-L-5858S-ocket5858C-lient.o
  "_SSL_library_init", referenced from:
      ___crystal_main in _main.o
  "_SSL_load_error_strings", referenced from:
      ___crystal_main in _main.o
  "_SSLv23_method", referenced from:
      _*OpenSSL::SSL::Context::default_method:Pointer(Void) in O-penS-S-L-5858S-S-L-5858C-ontext.o
  "_sk_free", referenced from:
      _~procProc(Pointer(Void), Nil)@src/openssl/ssl/hostname_validation.cr:71 in _main.o
      _~proc2Proc(Pointer(Void), Nil)@src/openssl/ssl/hostname_validation.cr:71 in _main.o
      _~proc3Proc(Pointer(Void), Nil)@src/openssl/ssl/hostname_validation.cr:71 in _main.o
      _~proc4Proc(Pointer(Void), Nil)@src/openssl/ssl/hostname_validation.cr:71 in _main.o
      _~proc5Proc(Pointer(Void), Nil)@src/openssl/ssl/hostname_validation.cr:71 in _main.o
      _~proc6Proc(Pointer(Void), Nil)@src/openssl/ssl/hostname_validation.cr:71 in _main.o
  "_sk_num", referenced from:
      _*OpenSSL::SSL::HostnameValidation::matches_subject_alternative_name<String, Pointer(Void)>:OpenSSL::SSL::HostnameValidation::Result in O-penS-S-L-5858S-S-L-5858H-ostnameV-alidation.o
  "_sk_pop_free", referenced from:
      _*OpenSSL::SSL::HostnameValidation::matches_subject_alternative_name<String, Pointer(Void)>:OpenSSL::SSL::HostnameValidation::Result in O-penS-S-L-5858S-S-L-5858H-ostnameV-alidation.o
  "_sk_value", referenced from:
      _*OpenSSL::SSL::HostnameValidation::matches_subject_alternative_name<String, Pointer(Void)>:OpenSSL::SSL::HostnameValidation::Result in O-penS-S-L-5858S-S-L-5858H-ostnameV-alidation.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Error: execution of command failed with code: 1: `cc "${@}" -o /Users/speg/Crystal/crystal/.build/std_spec -L/usr/local/opt/openssl@3/lib -rdynamic -L/usr/local/lib /Users/speg/Crystal/crystal/src/llvm/ext/llvm_ext.o `"/usr/local/opt/llvm@11/bin/llvm-config" --libs --system-libs --ldflags 2> /dev/null` -lstdc++ `command -v pkg-config > /dev/null && pkg-config --libs --silence-errors libssl || printf %s '-lssl -lcrypto'` `command -v pkg-config > /dev/null && pkg-config --libs --silence-errors libcrypto || printf %s '-lcrypto'` -lxml2 -lz -L/usr/local/Cellar/libyaml/0.2.5/lib -lyaml -L/usr/local/Cellar/gmp/6.2.1_1/lib -lgmp -lpcre -lgc -lpthread -L/usr/local/Cellar/libevent/2.1.12/lib -levent -liconv -ldl`

```

Sadly, this is a bit over my head at the moment. Does it make any sense to any of you?  
I assume it has something to do with openssl…

```auto
% openssl version
OpenSSL 3.0.1 14 Dec 2021 (Library: OpenSSL 3.0.1 14 Dec 2021)

```

---

<div class="post-metadata">

**Author:** ![jwoertink](https://yyz2.discourse-cdn.com/flex036/user_avatar/forum.crystal-lang.org/jwoertink/32/50_2.png) [@jwoertink](https://forum.crystal-lang.org/u/jwoertink)\
**Post date:** [January 7, 2022, 10:01pm UTC](https://forum.crystal-lang.org/t/building-compiler-on-mac-os/4240/2 "2022-01-07T22:01:21Z")

</div>

If you happen to be using a M1 Mac, try running `which openssl`. If that doesn’t return `/usr/bin/openssl`, then try running `brew unlink openssl` and give the Crystal build a shot again. If `which openssl` does return `/usr/bin/openssl`… then I’m not sure 😅

Openssl and M1 has sort of been a big issue around the Lucky discord lately. If you feel like dropping in [Lucky](https://luckyframework.org/chat) there’s a few people that have had some luck getting around this.
