Linux

  • La version 4.7 ou ultérieure de GCC est requise pour construire Julia.
  • Pour utiliser des bibliothèques partagées externes qui ne se trouvent pas dans le chemin de recherche des bibliothèques système, définissez USE_SYSTEM_XXX=1 et LDFLAGS=-Wl,-rpath,/path/to/dir/contains/libXXX.so dans Make.user.
  • Au lieu de définir LDFLAGS, mettre le répertoire de la bibliothèque dans la variable d'environnement LD_LIBRARY_PATH (à la fois au moment de la compilation et de l'exécution) fonctionne également.
  • Les drapeaux USE_SYSTEM_* doivent être utilisés avec prudence. Ceux-ci sont destinés uniquement au dépannage, au portage et à l'emballage, où les mainteneurs de paquets travaillent en étroite collaboration avec les développeurs de Julia pour s'assurer que Julia est construit correctement. Les cas d'utilisation en production doivent utiliser les binaires fournis officiellement. Les problèmes découlant de l'utilisation de ces drapeaux ne seront généralement pas acceptés.
  • Voir aussi le external dependencies.

Architecture Customization

Julia peut être construit pour une architecture non générique en configurant la variable ARCH dans un fichier Make.user. Consultez la section appropriée de Make.inc pour d'autres options de personnalisation, telles que MARCH et JULIA_CPU_TARGET.

Par exemple, pour construire pour Pentium 4, définissez MARCH=pentium4 et installez les bibliothèques système nécessaires pour le lien. Sur Ubuntu, celles-ci peuvent inclure lib32gfortran-6-dev, lib32gcc1 et lib32stdc++6, entre autres.

Vous pouvez également définir MARCH=native dans Make.user pour une compilation optimisée pour les performances maximales personnalisée pour le CPU de la machine actuelle.

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).