Сборка Scipy из исходников для Windows Arm64 заканчивается ошибками линковки lld.

Вопрос или проблема

я использую сборку scipy из исходников

Во время выполнения

python -m pip install -r requirements/build.txt -r requirements/dev.txt

matplotlib выдает ошибку.

llvm 18.1.0rc

Я собрал Openblas из исходников для arm64, указал путь в переменной окружения PKG-CONFIG-PATH и вставил его в созданную папку сборки после первой неудачи команды ниже.

python dev.py build

    lld-link: ошибка: слишком много ошибок, выполнение остановлено (используйте /errorlimit:0, чтобы увидеть все ошибки)
    flang-new: ошибка: команда компоновщика завершилась с кодом выхода 1 (используйте -v, чтобы увидеть вызов)
    [60/1300] Компиляция C-объекта scipy/special/cython_special.cp312-win_arm64.pyd.p/meson-generated_cython_special.c.obj
    ninja: сборка остановлена: выполнение подкоманды завершилось неудачей.
    Сборка не удалась!

я также вижу

-- Проверка работоспособности компилятора Fortran: C:/Program Files/LLVM/bin/flang-new.EXE
-- Проверка работоспособности компилятора Fortran: C:/Program Files/LLVM/bin/flang-new.EXE - не работает
-- Конфигурация не завершена, произошли ошибки!



ERR:
CMake Ошибка в C:/Program Files/CMake/share/cmake-3.31/Modules/CMakeTestFortranCompiler.cmake:59 (сообщение):
  Компилятор Fortran

    "C:/Program Files/LLVM/bin/flang-new.EXE"

  не может скомпилировать простую тестовую программу.

  Он завершает работу с следующим выводом:

Сменить директорию: 'C:/Users/USERNAME/Desktop/johndoe/scipy/build/meson-private/cmake_xsimd/CMakeFiles/CMakeScratch/TryCompile-0hh5mx'
    
    Выполнение команд сборки: C:/Users/USERNAME/Desktop/johndoe/scipy/venv/Scripts/ninja.exe -v cmTC_b1f75
    [1/4] C:\windows\system32\cmd.exe /C "C:\PROGRA~1\LLVM\bin\FLANG-~1.EXE -cpp   -fms-runtime-lib=dll_dbg -E C:\Users\USERNAME\Desktop\johndoe\scipy\build\meson-private\cmake_xsimd\CMakeFiles\CMakeScratch\TryCompile-0hh5mx\testFortranCompiler.f > CMakeFiles\cmTC_b1f75.dir\testFortranCompiler.f-pp.f && "C:\Program Files\CMake\bin\cmake.exe" -E cmake_ninja_depends --tdi=CMakeFiles\cmTC_b1f75.dir\FortranDependInfo.json --lang=Fortran --src=CMakeFiles\cmTC_b1f75.dir\testFortranCompiler.f-pp.f --out=CMakeFiles\cmTC_b1f75.dir\testFortranCompiler.f-pp.f --dep=CMakeFiles\cmTC_b1f75.dir\testFortranCompiler.f-pp.f.d --obj=CMakeFiles\cmTC_b1f75.dir\testFortranCompiler.f.obj --ddi=CMakeFiles\cmTC_b1f75.dir\testFortranCompiler.f.obj.ddi --src-orig=C:\Users\USERNAME\Desktop\johndoe\scipy\build\meson-private\cmake_xsimd\CMakeFiles\CMakeScratch\TryCompile-0hh5mx\testFortranCompiler.f"
    [2/4] "C:\Program Files\CMake\bin\cmake.exe" -E cmake_ninja_dyndep --tdi=CMakeFiles\cmTC_b1f75.dir\FortranDependInfo.json --lang=Fortran --dd=CMakeFiles\cmTC_b1f75.dir\Fortran.dd @CMakeFiles\cmTC_b1f75.dir\Fortran.dd.rsp
    [3/4] C:\PROGRA~1\LLVM\bin\FLANG-~1.EXE -IC:\Users\USERNAME\Desktop\johndoe\scipy\build\meson-private\cmake_xsimd\CMakeFiles\CMakeScratch\TryCompile-0hh5mx -fms-runtime-lib=dll_dbg -ffixed-line-length-72 -o CMakeFiles\cmTC_b1f75.dir\testFortranCompiler.f.obj -c CMakeFiles\cmTC_b1f75.dir\testFortranCompiler.f-pp.f
    [4/4] C:\windows\system32\cmd.exe /C "cd . && "C:\Program Files\CMake\bin\cmake.exe" -E vs_link_exe --msvc-ver=1941 --intdir=CMakeFiles\cmTC_b1f75.dir --rc=rc --mt="" --manifests  -- C:\PROGRA~1\LLVM\bin\lld-link.exe /nologo CMakeFiles\cmTC_b1f75.dir\testFortranCompiler.f.obj  /out:cmTC_b1f75.exe /implib:cmTC_b1f75.lib /pdb:cmTC_b1f75.exe.dbg /version:0.0 /machine:ARM64  /debug /INCREMENTAL /subsystem:console   -libpath:"C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.41.34120/lib/arm64" -libpath:"C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.41.34120/atlmfc/lib/arm64" -libpath:"C:/Program Files (x86)/Windows Kits/10/Lib/10.0.22621.0/ucrt/arm64" -libpath:"C:/Program Files (x86)/Windows Kits/10/Lib/10.0.22621.0/um/arm64" -libpath:"C:/Program Files/LLVM/lib" -libpath:"C:/Program Files/LLVM/lib/clang/18/lib/windows"  && cd ."
    НЕУДАЧА: cmTC_b1f75.exe 
    C:\windows\system32\cmd.exe /C "cd . && "C:\Program Files\CMake\bin\cmake.exe" -E vs_link_exe --msvc-ver=1941 --intdir=CMakeFiles\cmTC_b1f75.dir --rc=rc --mt="" --manifests  -- C:\PROGRA~1\LLVM\bin\lld-link.exe /nologo CMakeFiles\cmTC_b1f75.dir\testFortranCompiler.f.obj  /out:cmTC_b1f75.exe /implib:cmTC_b1f75.lib /pdb:cmTC_b1f75.exe.dbg /version:0.0 /machine:ARM64  /debug /INCREMENTAL /subsystem:console   -libpath:"C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.41.34120/lib/arm64" -libpath:"C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.41.34120/atlmfc/lib/arm64" -libpath:"C:/Program Files (x86)/Windows Kits/10/Lib/10.0.22621.0/ucrt/arm64" -libpath:"C:/Program Files (x86)/Windows Kits/10/Lib/10.0.22621.0/um/arm64" -libpath:"C:/Program Files/LLVM/lib" -libpath:"C:/Program Files/LLVM/lib/clang/18/lib/windows"  && cd ."
    RC Pass 1: команда "rc /fo CMakeFiles\cmTC_b1f75.dir/manifest.res CMakeFiles\cmTC_b1f75.dir/manifest.rc" завершилась неудачей (код выхода 0) с следующим выводом:
    нет такого файла или каталога
    ninja: сборка остановлена: выполнение подкоманды завершилось неудачей.

Ответ или решение

Чтобы устранить ошибки сборки SciPy из исходников на Windows Arm64, необходимо обратить внимание на несколько ключевых аспектов, упомянутых в вашем вопросе. Давайте разберем проблему детально и предоставим возможные решения.

1. Ошибки компиляции с использованием flang-new

Судя по сообщениям об ошибках, основная проблема заключается в том, что Fortran-компилятор flang-new, который вы используете, не может создать тестовую программу. Это может быть связано с неверной конфигурацией среды разработки или несовместимостью версий инструментов.

Рекомендации:

  • Убедитесь, что у вас установлена последняя стабильная версия LLVM и CMake. Например, LLVM 18.0 будет более стабильным, чем 18.1.0rc.
  • Проверьте, правильно ли установлены переменные окружения, такие как PKG_CONFIG_PATH и пути к библиотекам. Эти пути должны указывать на необходимые заголовочные файлы и библиотеки, особенно для OpenBLAS.
  • Если у вас возникли проблемы с flang, рассмотрите возможность использования других Fortran-компиляторов, таких как gfortran, если это возможно на вашей системе.

Сообщение lld-link: error: too many errors emitted, stopping now указывает на то, что в процессе линковки возникает множество ошибок, что мешает завершению сборки.

Рекомендации:

  • Попробуйте использовать флаг /errorlimit:0, чтобы получить больше информации о найденных ошибках. Это может помочь выявить, какие именно проблемы возникают.
  • Убедитесь, что все зависимости правильно установлены и имеют соответствующие пути. Если вы были вынуждены изменять конфигурации, проверьте правильность всех изменений.

3. Проверка среды разработки

Проверьте, работает ли ваша установка Visual Studio и все необходимые компиляторы:

  • Откройте Visual Studio и создайте новый проект, попробуйте скомпилировать простой C или Fortran файл, чтобы убедиться, что комплект инструментов работает правильно.
  • Убедитесь, что установлены все необходимые компоненты для поддержки разработки под ARM64, включая C++ и C#.

4. Установка и конфигурация зависимостей

Перепроверьте, правильно ли вы установили все зависимости SciPy:

  • Выполните команду:
    python -m pip install -r requirements/build.txt
    python -m pip install -r requirements/dev.txt
  • Если ошибка по-прежнему возникает на matplotlib, попробуйте установить её отдельно:
    python -m pip install matplotlib

Заключение

Сборка SciPy из исходников на Windows Arm64 может быть сложной задачей из-за множества зависимостей и взаимодействий. Внимательное следование процедурами установки, правильная настройка переменных окружения и использование стабильных версий необходимых инструментов помогут вам избежать большинства распространенных ошибок.

Если ни одно из предложенных решений не сработает, рекомендуется обратиться на форумы или к сообществу SciPy для дальнейшей помощи, предоставив в них более подробные логи ошибок и сведения о вашей среде разработки.

Оцените материал
Добавить комментарий

Капча загружается...