Linux

  • Se requiere la versión 4.7 o posterior de GCC para compilar Julia.
  • Para usar bibliotecas compartidas externas que no están en la ruta de búsqueda de bibliotecas del sistema, establece USE_SYSTEM_XXX=1 y LDFLAGS=-Wl,-rpath,/path/to/dir/contains/libXXX.so en Make.user.
  • En lugar de establecer LDFLAGS, poner el directorio de la biblioteca en la variable de entorno LD_LIBRARY_PATH (tanto en tiempo de compilación como en tiempo de ejecución) también funciona.
  • Las banderas USE_SYSTEM_* deben usarse con precaución. Estas están destinadas únicamente para la solución de problemas, la portación y el empaquetado, donde los mantenedores de paquetes trabajan en estrecha colaboración con los desarrolladores de Julia para asegurarse de que Julia se construya correctamente. Los casos de uso en producción deben utilizar los binarios proporcionados oficialmente. Los problemas que surjan del uso de estas banderas generalmente no serán aceptados.
  • Vea también el external dependencies.

Architecture Customization

Julia se puede construir para una arquitectura no genérica configurando la variable ARCH en un archivo Make.user. Consulte la sección apropiada de Make.inc para opciones de personalización adicionales, como MARCH y JULIA_CPU_TARGET.

Por ejemplo, para compilar para Pentium 4, establece MARCH=pentium4 e instala las bibliotecas del sistema necesarias para el enlace. En Ubuntu, estas pueden incluir lib32gfortran-6-dev, lib32gcc1 y lib32stdc++6, entre otras.

También puedes establecer MARCH=native en Make.user para una compilación de máximo rendimiento personalizada para la CPU actual de la máquina.

Linux Build Troubleshooting

ProblemPossible Solution
OpenBLAS build failureSet one of the following build options in Make.user and build again: <ul><li> OPENBLAS_TARGET_ARCH=BARCELONA (AMD CPUs) or OPENBLAS_TARGET_ARCH=NEHALEM (Intel CPUs)<ul>Set OPENBLAS_DYNAMIC_ARCH = 0 to disable compiling multiple architectures in a single binary.</ul></li><li> OPENBLAS_NO_AVX2 = 1 disables AVX2 instructions, allowing OpenBLAS to compile with OPENBLAS_DYNAMIC_ARCH = 1 using old versions of binutils </li><li> USE_SYSTEM_BLAS=1 uses the system provided libblas <ul><li>Set LIBBLAS=-lopenblas and LIBBLASNAME=libopenblas to 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 = 0 or OPENBLAS_NO_AVX2 = 1, or you need a newer version of binutils (2.18 or newer). (Issue #7653)</p><p> If the linker cannot find gfortran and you get an error like julia /usr/bin/x86_64-linux-gnu-ld: cannot find -lgfortran, check the path with gfortran -print-file-name=libgfortran.so and 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 errorCheck if your CPU supports AVX while your OS does not (e.g. through virtualization, as described in this issue).