Документация Engee

Windows

В этом документе описываются установка или сборка и использование Julia в Windows.

Более общую информацию о Julia см. в главном файле README или документации.

Общая информация для Windows

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

Окончания строк

В Julia файлы используются исключительно в двоичном режиме. В отличие от многих других программ 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

Распространение двоичных файлов

Замечания об установке, касающиеся распространения двоичных файлов в Windows, см. в инструкциях по адресу https://julialang.org/downloads/platform/#windows.

Распространение исходного кода

Кросскомпиляция из Cygwin в MinGW

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

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

    Дополнительно: шаги 2—​4 можно пропустить, выполнив следующую команду:

    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

    замените <url> адресом сайта с https://cygwin.com/mirrors.html либо сначала запустите установку вручную, а затем выберите зеркало.

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

  3. На шаге Select Packages (Выбор пакетов) выберите следующие значения.

    1. В категории Devel (Разработка): cmake, gcc-g++, git, make, patch

    2. В категории Net (Сеть): curl

    3. В категории Interpreters (Интерпретаторы) (или 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 (Терминал Cygwin) или Cygwin64 Terminal (Терминал Cygwin64) соответственно.

  5. Выполните сборку Julia и зависимостей из исходного кода.

    1. Получите исходный код Julia

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

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

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

       echo 'XC*HOST = i686-w64-mingw32' > Make.user     # для 32-разрядной версии Julia
       # или
       echo 'XC*HOST = x86_64-w64-mingw32' > Make.user   # для 64-разрядной версии Julia
    3. Запустите сборку

       make -j 4       # Настройте количество потоков (4) в соответствии со средой сборки.
       make -j 4 debug # В результате создается файл julia-debug.exe
  6. Запустите Julia, используя исполняемые файлы Julia напрямую

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

!!! note "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  # сборка для Windows x86 в папке julia-win32
make -C julia-win64  # сборка для Windows x86-64 в папке julia-win64

link:@id Compiling-with-MinGW/MSYS2[Компиляция с помощью MinGW/MSYS2]

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

Примечание. Для MSYS2 требуется 64-разрядная версия Windows 7 или более поздняя.

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

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

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

       pacman -Syu
    3. Exit and restart MSYS2. Update the rest of the base packages:

       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 и зависимостей с предварительно собранными зависимостями.

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

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

       git clone https://github.com/JuliaLang/julia.git
       cd julia
    8. Запустите сборку

       make -j$(nproc)

      !!! note "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

link:@id Cross-compiling-from-Unix-(Linux/Mac/WSL)[Кросскомпиляция из Unix (Linux, Mac, WSL)]

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

Сначала необходимо убедиться в наличии необходимых зависимостей в вашей системе. Вам потребуются 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
# 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-разрядном режиме.)

Отладка кросскомпилированной сборки в wine

Самым эффективным способом отладки кросскомпилированной версии Julia на хосте кросскомпиляции является установка версии GDB для Windows и ее запуск в среде wine обычным образом. Предварительно собранные пакеты, доступные в рамках проекта MSYS2, должны работать. Помимо пакета GDB, вам также могут потребоваться пакеты python и termcap. Наконец, командная строка GDB может не работать при запуске из командной строки. Чтобы обойти эту проблему, добавьте wineconsole перед обычным вызовом GDB.

После компиляции

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

Отладка сборки Windows

GDB зависает в Cygwin mintty

  • Запустите GDB в консоли Windows (cmd). GDB может работать неправильно в mintty с приложениями, не предназначенными для среды Cygwin. При необходимости можно запустить консоль Windows из mintty с помощью команды cmd /c start.

GDB не подключается к нужному процессу

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

GDB выводит неправильную обратную трассировку

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

  • Обязательно используйте 32-разрядную версию GDB для отладки 32-разрядной сборки Julia и 64-разрядную версию GDB для отладки 64-разрядной сборки Julia.

Процесс сборки выполняется медленно, потребляет много памяти или приводит к зависанию компьютера

  • Отключите службы Windows Superfetch и Помощник по совместимости программ, так как известно, что они осуществляют фиктивные взаимодействия с MinGW/Cygwin.

    Как указано по ссылке выше, причину чрезмерного потребления памяти процессом svchost можно узнать, щелкнув в диспетчере задач по процессу svchost.exe и выбрав пункт Go to Services (Перейти к службам). Поочередно отключайте дочерние службы, пока не найдете виновника.

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