Документация 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 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
  6. Запустите исполняемые файлы Julia напрямую:

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

Компиляция с помощью MinGW/MSYS2

MSYS2 предоставляет надежную среду MSYS.

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

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

    1. Скачайте и запустите последнюю версию установщика для 64-разрядного дистрибутива. У установщика будет имя наподобие 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. В настоящее время использовать mingw32 и mingw64 одновременно нельзя, поэтому если вы хотите выполнить сборку версий x86_64 и i686, вам потребуется сделать это в каждой среде отдельно.

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

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

       make -j:nproc

    Совет профессионала: выполните сборку в dir

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

Кросс-компиляция из 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 # при необходимости добавьте sudo перед каждой командой
# переключите все следующие варианты "-posix" (в интерактивном режиме):
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.