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
etLDFLAGS=-Wl,-rpath,/path/to/dir/contains/libXXX.so
dansMake.user
. - Au lieu de définir
LDFLAGS
, mettre le répertoire de la bibliothèque dans la variable d'environnementLD_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
Problem | Possible Solution |
---|---|
OpenBLAS build failure | Set 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 error | Check if your CPU supports AVX while your OS does not (e.g. through virtualization, as described in this issue). |