Linux 
- GCC version 4.7 or later is required to build Julia. 
- To use external shared libraries not in the system library search path, set - USE_SYSTEM_XXX=1and- LDFLAGS=-Wl,-rpath,/path/to/dir/contains/libXXX.soin- Make.user.
- Instead of setting - LDFLAGS, putting the library directory into the environment variable- LD_LIBRARY_PATH(at both compile and run time) also works.
- The - USE_SYSTEM_*flags should be used with caution. These are meant only for troubleshooting, porting, and packaging, where package maintainers work closely with the Julia developers to make sure that Julia is built correctly. Production use cases should use the officially provided binaries. Issues arising from the use of these flags will generally not be accepted.
- See also the external dependencies. 
Architecture Customization 
Julia can be built for a non-generic architecture by configuring the ARCH Makefile variable in a Make.user file. See the appropriate section of Make.inc for additional customization options, such as MARCH and JULIA_CPU_TARGET.
For example, to build for Pentium 4, set MARCH=pentium4 and install the necessary system libraries for linking. On Ubuntu, these may include lib32gfortran-6-dev, lib32gcc1, and lib32stdc++6, among others.
You can also set MARCH=native in Make.user for a maximum-performance build customized for the current machine CPU.
Linux Build Troubleshooting 
| Problem | Possible Solution | 
|---|---|
| OpenBLAS build failure | Set one of the following build options in Make.userand build again: <ul><li>OPENBLAS_TARGET_ARCH=BARCELONA(AMD CPUs) orOPENBLAS_TARGET_ARCH=NEHALEM(Intel CPUs)<ul>SetOPENBLAS_DYNAMIC_ARCH = 0to disable compiling multiple architectures in a single binary.</ul></li><li>OPENBLAS_NO_AVX2 = 1disables AVX2 instructions, allowing OpenBLAS to compile withOPENBLAS_DYNAMIC_ARCH = 1using old versions of binutils </li><li>USE_SYSTEM_BLAS=1uses the system providedlibblas<ul><li>SetLIBBLAS=-lopenblasandLIBBLASNAME=libopenblasto force the use of the system provided OpenBLAS when multiple BLAS versions are installed. </li></ul></li></ul><p> If you get an error that looks like../kernel/x86_64/dgemm_kernel_4x4_haswell.S:1709: Error: no such instruction: vpermpd $ 0xb1,%ymm0,%ymm0', then you need to set OPENBLAS_DYNAMIC_ARCH = 0orOPENBLAS_NO_AVX2 = 1, or you need a newer version of binutils(2.18 or newer). ([Issue #7653](https://github.com/JuliaLang/julia/issues/7653))</p><p> If the linker cannot findgfortranand you get an error likejulia /usr/bin/x86_64-linux-gnu-ld: cannot find -lgfortran, check the path with gfortran -print-file-name=libgfortran.soand use the output to export something similar to this:export LDFLAGS=-L/usr/lib/gcc/x86_64-linux-gnu/8/`. See Issue #6150.</p> | 
| Illegal Instruction error | Check if your CPU supports AVX while your OS does not (e.g. through virtualization, as described in this issue). |