Windows

Этот файл описывает, как установить или собрать и использовать Julia на Windows.

Для получения более общей информации о Julia, пожалуйста, смотрите main README или documentation.

General Information for Windows

Мы настоятельно рекомендуем запускать Julia с использованием современного терминального приложения, в частности Windows Terminal, который можно установить по адресу Microsoft Store.

Line endings

Джулия использует файлы в двоичном режиме исключительно. В отличие от многих других программ Windows, если вы запишите \n в файл, вы получите \n в файле, а не какой-то другой битовый шаблон. Это соответствует поведению, наблюдаемому в других операционных системах. Если вы установили Git для Windows, рекомендуется, но не обязательно, настроить ваш системный Git на использование той же конвенции:

git config --global core.eol lf
git config --global core.autocrlf input

или отредактируйте %USERPROFILE%\.gitconfig и добавьте/измените строки:

[core]
    eol = lf
    autocrlf = input

Binary distribution

Для заметок по установке бинарного дистрибутива на Windows, пожалуйста, смотрите инструкции по адресу https://julialang.org/downloads/platform/#windows.

Source distribution

Cygwin-to-MinGW cross-compiling

Рекомендуемый способ компиляции Julia из исходников на Windows - это кросс-компиляция из Cygwin, используя версии компиляторов MinGW-w64, доступные через менеджер пакетов Cygwin.

  1. Скачайте и запустите установку Cygwin для 32 bit или 64 bit. Обратите внимание, что вы можете компилировать как 32-битную, так и 64-битную версию Julia как из 32-битного, так и из 64-битного Cygwin. 64-битный Cygwin имеет немного меньший, но часто более актуальный выбор пакетов.

    Расширенный: вы можете пропустить шаги 2-4, запустив:

    sh setup-x86_64.exe -s <url> -q -P cmake,gcc-g++,git,make,patch,curl,m4,python3,p7zip,mingw64-i686-gcc-g++,mingw64-i686-gcc-fortran,mingw64-x86_64-gcc-g++,mingw64-x86_64-gcc-fortran

    replacing <url> with a site from https://cygwin.com/mirrors.html or run setup manually first and select a mirror.

  2. Выберите место установки и зеркало для загрузки.

  3. На шаге Выбор пакетов выберите следующее:

    1. Из категории Devel: cmake, gcc-g++, git, make, patch
    2. Из категории Сеть: curl
    3. Из категории Интерпретаторы (или Python): m4, python3
    4. Из категории Archive: p7zip
    5. Для 32-битной Julia, а также из категории Devel: mingw64-i686-gcc-g++ и mingw64-i686-gcc-fortran
    6. Для 64-битного Julia, а также из категории Devel: mingw64-x86_64-gcc-g++ и mingw64-x86_64-gcc-fortran
  4. Позвольте установке Cygwin завершиться, затем начните с установленного ярлыка 'Cygwin Terminal', или 'Cygwin64 Terminal', соответственно.

  5. Соберите Julia и её зависимости из исходников:

    1. Получите источники Julia

      sh git clone https://github.com/JuliaLang/julia.git cd julia

      Совет: Если вы получили error: cannot fork() for fetch-pack: Resource temporarily unavailable от git, добавьте alias git="env PATH=/usr/bin git" в ~/.bashrc и перезапустите Cygwin.

    2. Установите переменную XC_HOST в Make.user, чтобы указать на кросс-компиляцию MinGW-w64.

      ```sh echo 'XC_HOST = i686-w64-mingw32' > Make.user # for 32 bit Julia

      or

      echo 'XCHOST = x8664-w64-mingw32' > Make.user # for 64 bit Julia ```

    3. Начать сборку

      sh make -j 4 # Adjust the number of threads (4) to match your build environment. make -j 4 debug # This builds julia-debug.exe

  6. Запустите Julia, используя исполняемые файлы Julia напрямую

    sh usr/bin/julia.exe usr/bin/julia-debug.exe

Pro tip: build both!
make O=julia-win32 configure
make O=julia-win64 configure
echo 'XC_HOST = i686-w64-mingw32' > julia-win32/Make.user
echo 'XC_HOST = x86_64-w64-mingw32' > julia-win64/Make.user
echo 'ifeq ($(BUILDROOT),$(JULIAHOME))
        $(error "in-tree build disabled")
      endif' >> Make.user
make -C julia-win32  # build for Windows x86 in julia-win32 folder
make -C julia-win64  # build for Windows x86-64 in julia-win64 folder

Compiling with MinGW/MSYS2

MSYS2 является средой распространения и сборки программного обеспечения для Windows.

Примечание: MSYS2 требует 64-битную версию Windows 7 или новее.

  1. Установите и настройте MSYS2.

    1. Скачайте и запустите последний установщик для дистрибутива 64-bit. Установщик будет иметь имя, похожее на msys2-x86_64-yyyymmdd.exe.

    2. Откройте оболочку MSYS2. Обновите базу данных пакетов и базовые пакеты:

      pacman -Syu

    3. Выйдите и перезапустите MSYS2. Обновите остальные базовые пакеты:

      pacman -Syu

    4. Затем установите инструменты, необходимые для сборки julia:

      pacman -S cmake diffutils git m4 make patch tar p7zip curl python

      Для 64-битной версии Julia установите версию x86_64:

      pacman -S mingw-w64-x86_64-gcc

      Для 32-битной версии Julia установите версию i686:

      pacman -S mingw-w64-i686-gcc

    5. Конфигурация MSYS2 завершена. Теперь введите exit для выхода из оболочки MSYS2.

  2. Соберите Julia и её зависимости с предустановленными зависимостями.

    1. Откройте новый MINGW64/MINGW32 shell. В настоящее время мы не можем использовать как mingw32, так и mingw64, поэтому, если вы хотите собрать версии x86_64 и i686, вам нужно будет собирать их в каждой среде отдельно.

    2. Клонируйте исходники Julia:

      git clone https://github.com/JuliaLang/julia.git cd julia

    3. Начать сборку

      make -j$(nproc)

Pro tip: build in dir
make O=julia-mingw-w64 configure
echo 'ifeq ($(BUILDROOT),$(JULIAHOME))
        $(error "in-tree build disabled")
      endif' >> Make.user
make -C julia-mingw-w64

Cross-compiling from Unix (Linux/Mac/WSL)

Вы также можете использовать кросс-компиляторы MinGW-w64 для сборки версии Julia для Windows из Linux, Mac или Подсистемы Windows для Linux (WSL).

Сначала вам нужно убедиться, что в вашей системе установлены необходимые зависимости. Нам нужен wine (>=1.7.5), системный компилятор и несколько загрузчиков. Примечание: установка Cygwin может помешать этому методу, если используется WSL.

На Ubuntu (в других системах Linux имена зависимостей, вероятно, будут похожи):

apt-get install wine-stable gcc wget p7zip-full winbind mingw-w64 gfortran-mingw-w64
dpkg --add-architecture i386 && apt-get update && apt-get install wine32 # add sudo to each if needed
# switch all of the following to their "-posix" variants (interactively):
for pkg in i686-w64-mingw32-g++ i686-w64-mingw32-gcc i686-w64-mingw32-gfortran x86_64-w64-mingw32-g++ x86_64-w64-mingw32-gcc x86_64-w64-mingw32-gfortran; do
    sudo update-alternatives --config $pkg
done

На Mac: Установите XCode, инструменты командной строки XCode, X11 (теперь XQuartz), и MacPorts или Homebrew. Затем выполните port install wine wget mingw-w64, или brew install wine wget mingw-w64, в зависимости от ситуации.

Затем выполните сборку:

  1. git clone https://github.com/JuliaLang/julia.git julia-win32
  2. cd julia-win32
  3. echo override XC_HOST = i686-w64-mingw32 >> Make.user
  4. make
  5. make win-extras (Необходимо перед запуском make binary-dist)
  6. make binary-dist, а затем make exe, чтобы создать установщик для Windows.
  7. переместите установщик julia-*.exe на целевую машину

Если вы разрабатываете для 64-битной Windows, шаги в основном те же. Просто замените i686 в XC_HOST на x86_64. (Примечание: на Mac wine работает только в 32-битном режиме).

Debugging a cross-compiled build under wine

Наиболее эффективный способ отладки кросс-компилированной версии Julia на хосте кросс-компиляции — установить версию GDB для Windows и запускать её под wine, как обычно. Предварительно собранные пакеты, доступные as part of the MSYS2 project, известны своей работоспособностью. Кроме пакета GDB, вам также могут понадобиться пакеты python и termcap. Наконец, приглашение GDB может не работать при запуске из командной строки. Это можно обойти, добавив wineconsole перед обычным вызовом GDB.

After compiling

Компиляция с использованием одного из вышеперечисленных вариантов создает базовую сборку Julia, но не включает некоторые дополнительные компоненты, которые присутствуют, если вы запускаете полный установщик бинарного файла Julia. Если вам нужны эти компоненты, самый простой способ их получить — это собрать установщик самостоятельно, используя make win-extras, затем make binary-dist и make exe. Затем запустите полученный установщик.

Windows Build Debugging

GDB hangs with Cygwin mintty

  • Запустите GDB в консоли Windows (cmd) вместо этого. GDB may not function properly под mintty с не-Cygwin приложениями. Вы можете использовать cmd /c start, чтобы запустить консоль Windows из mintty, если это необходимо.

GDB not attaching to the right process

  • Используйте PID из диспетчера задач Windows или WINPID из команды ps, вместо PID из инструментов командной строки в стиле Unix (например, pgrep). Возможно, вам потребуется добавить столбец PID, если он не отображается по умолчанию в диспетчере задач Windows.

GDB not showing the right backtrace

  • При присоединении к процессу julia GDB может не присоединяться к правильному потоку. Используйте команду info threads, чтобы показать все потоки, и thread <threadno>, чтобы переключиться между потоками.
  • Убедитесь, что вы используете 32-битную версию GDB для отладки 32-битной сборки Julia или 64-битную версию GDB для отладки 64-битной сборки Julia.

Build process is slow/eats memory/hangs my computer

  • Отключите службы Windows Superfetch и Program Compatibility Assistant, так как известно, что они имеют spurious interactions с MinGW/Cygwin.

    Как упомянуто в ссылке выше: чрезмерное использование памяти svchost может быть исследовано в Диспетчере задач, нажав на процесс svchost.exe с высоким использованием памяти и выбрав Перейти к службам. Отключайте дочерние службы одну за другой, пока не будет найден виновник.

  • Остерегайтесь BLODA. Инструмент vmmap незаменим для выявления таких конфликтов программного обеспечения. Используйте vmmap для проверки списка загруженных DLL для bash, mintty или другого постоянного процесса, используемого для сборки. По сути, любая DLL вне каталога системы Windows является потенциальным BLODA.