Compile a Rust binary on macOS (dbcrossbar)

backstory

I wanted to try out dbcrossbar: a utility for transferring data to and fro databases.

I use nix to manage various open source software installations on my mac. OpenSSL is one example.

Some packages have trouble finding nix’s custom locations for packages such as OpenSSL. As a result you’ll sometimes see cargo install errors about not finding your system’s OpenSSL installation. Other obscure errors arise too.

simple fix

I use a simple workaround.

  • Define a shell.nix
  • nix-shell
  • cargo install dbcrossbar

addenda and shell.nix

Compiling dbcrossbar kept failing even with a basic shell.nix. It failed with:

  = note: ld: framework not found Security
          clang-5.0: error: linker command failed with exit code 1 (use -v to see invocation)


error: aborting due to previous error

error: failed to compile `dbcrossbar v0.4.1`, intermediate artifacts can be found at `/var/folders/r6/1tb0c_rn22xdhm39d62y6rfh0000gn/T/cargo-install6YxSuq`

Caused by:
  could not compile `dbcrossbar`.

To learn more, run the command again with --verbose.

It turns out I needed to provide darwin.apple_sdk.frameworks.Security to buildInputs.
So the final working shell.nix is:

with import <nixpkgs> { };

pkgs.mkShell {
  buildInputs = [
    darwin.apple_sdk.frameworks.Security
    pkgconfig
    openssl
  ];
}

Hopefully this spares you seconds, minutes, and hours combing the Internet for a solution. Now onto exploring dbcrossbar!

6 Likes

Was having the same problem with the SystemConfiguration framework, and this post saved me hours. Adding this comment both to say thanks and to add SystemConfiguration to the page for the search engines.

3 Likes