What are the differences between PackageCompiler and BinaryBuilder to build stan-alone apps?

Hi all!

Pretty much the title question, but I’d like to give a bit of context. I’m using Julia to develop my Master’s thesis (love the language so far). I need to integrate a linear model predictor I’m developing into the workflow of my lab colleagues, and I have now a choice. I can ask them to install Julia, but the ideal would be to produce a stand-alone binary executable. My question is: what are the differences between PackageCompiler’s create_app() and BinaryBuilder.jl? If you prefer it in this way, why would I need one when there’s the other?
I can make two observations:

  1. For what I read, BinaryBuilder is more targeted towards cross-compilation, whereas PackageCompiler is not. Did I understood correctly? If yes, why on the language homepage it is advised PackageCompiler to compile to binary (at voice “Ecosystem”)?
  2. Little note: I need to embed the model data into the application (for now simply using Serialization.jl and deserializing the object). Is this easier in one app or in the other?


1 Like

To put it simple, BinaryBuilder is for compiling non-Julia software, supported languages are C/C++, Fortran, Rust and Go. If you want to create an executable out of some Julia code, PackageCompiler is probably your best bet at the moment, BinaryBuilder can’t help you with that.


To add more context, BinaryBuilder is used to compile third-party libraries that are need by Julia packages.
For example, when you install (add) Ipopt.jl, you (by default) install the C++ Ipopt library that has been compiled with BinaryBuilder and used (wrapped) by Ipopt.jl.

1 Like

Got it, thank you very much, to both! :pray: