Почему PyTorch не работает с MinGW?

Я пытался использовать версию Pytorch для С++ (версия 2.0), то есть LibTorch на win11, но когда я выполняю операцию mingw32-make, я получаю сообщение об ошибке отсутствия файла следующим образом:

пример каталога выглядит следующим образом:

example-app/
  build
  CMakeLists.txt
  example-app.cpp

Подробный результат работы cmake .. -G "MinGW Makefiles" .:

(base) PS D:\pytorch-cpp\pytorch-test\example-app\build> cmake .. -G "MinGW Makefiles" .      
-- The C compiler identification is GNU 9.2.0
-- The CXX compiler identification is GNU 9.2.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: D:/MinGW/bin/gcc.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: D:/MinGW/bin/g++.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found Torch: D:/pytorch-cpp/pytorch-cpu/libtorch/lib/torch.lib  
-- Pytorch status:
--     libraries: torch;torch_library;D:/pytorch-cpp/pytorch-cpu/libtorch/lib/c10.lib;D:/pytorch-cpp/pytorch-cpu/libtorch/lib/kineto.lib
-- Configuring done
-- Generating done
-- Build files have been written to: D:/pytorch-cpp/pytorch-test/example-app/build

(base) PS D:\pytorch-cpp\pytorch-test\example-app\build> mingw32-make
[ 50%] Building CXX object CMakeFiles/app.dir/example-app.cpp.obj
g++.exe: error: /EHsc: No such file or directory
g++.exe: error: /DNOMINMAX: No such file or directory
g++.exe: error: /wd4267: No such file or directory
g++.exe: error: /wd4251: No such file or directory
g++.exe: error: /wd4522: No such file or directory
g++.exe: error: /wd4838: No such file or directory
g++.exe: error: /wd4305: No such file or directory
g++.exe: error: /wd4244: No such file or directory
g++.exe: error: /wd4190: No such file or directory
g++.exe: error: /wd4101: No such file or directory
g++.exe: error: /wd4996: No such file or directory
g++.exe: error: /wd4275: No such file or directory
g++.exe: error: /bigobj: No such file or directory
CMakeFiles\app.dir\build.make:75: recipe for target 'CMakeFiles/app.dir/example-app.cpp.obj' failed
mingw32-make[2]: *** [CMakeFiles/app.dir/example-app.cpp.obj] Error 1
CMakeFiles\Makefile2:81: recipe for target 'CMakeFiles/app.dir/all' failed
mingw32-make[1]: *** [CMakeFiles/app.dir/all] Error 2
Makefile:89: recipe for target 'all' failed
mingw32-make: *** [all] Error 2

Я собрал проект точно так, как указано на официальном сайте, где находится example-app.cpp.

#include <iostream>
#include <torch/torch.h>
int main() {
  torch::Tensor tensor = torch::rand({2, 3});
  std::cout << tensor << std::endl;
}

CMakeLists.txt:

cmake_minimum_required(VERSION 3.0)
project(example-app)

list(APPEND CMAKE_PREFIX_PATH "D:/pytorch-cpp/pytorch-cpu/libtorch")
find_package(Torch REQUIRED)
if (NOT Torch_FOUND)
    message(FATAL_ERROR "Pytorch Not Found!")
endif (NOT Torch_FOUND)
message(STATUS "Pytorch status:")
message(STATUS "    libraries: ${TORCH_LIBRARIES}")

add_executable(app example-app.cpp)
target_link_libraries(app ${TORCH_LIBRARIES})
set_property(TARGET app PROPERTY CXX_STANDARD 11)
if (MSVC)
  file(GLOB TORCH_DLLS "${TORCH_INSTALL_PREFIX}/lib/*.dll")
  add_custom_command(TARGET cpp
                     POST_BUILD
                     COMMAND ${CMAKE_COMMAND} -E copy_if_different
                     ${TORCH_DLLS}
                     $<TARGET_FILE_DIR:cpp>)
endif (MSVC)

Я попробовал несколько методов для успешной компиляции, все они сообщают об одной и той же ошибке, даже при использовании Win7 и Linux, где Win7 имеет ту же ошибку, что и Win11, но отлично компилируется в Linux. Как мне решить эту проблему в системе Windows?

Правильный результат программы должен быть:

0.2063  0.6593  0.0866
0.0796  0.5841  0.1569
[ Variable[CPUFloatType]{2,3} ]

Все параметры, которые вы видите от /Z7 до /bigobj, являются параметрами cl.exe MSVC, а не g++. Я не понимаю, откуда это взялось, но где-то в цепочке сборки предполагается, что вы используете компилятор Microsoft, а не GCC.

Friedrich 02.05.2023 11:50

@Friedrich Дело в том, что Libtorch не поддерживает компилятор Mingw32, и мне нужно скомпилировать с помощью MSVC?

agogag 03.05.2023 05:11

об этом в основном спрашивали раньше: Причина ошибки сборки cmake при поиске файлов g++.exe с использованием Windows и Mingw (установка Libtorch)?, но я отвечу здесь, так как я думаю, что этот вопрос немного лучше задан, и там еще нет поста с ответом.

starball 03.05.2023 05:41
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
3
83
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

На момент написания этой статьи сборка PyTorch с помощью MinGW не поддерживается. Вместо этого вы можете переключиться на использование генератора Visual Studio CMake.

См. https://github.com/pytorch/pytorch/issues/24460#issuecomment-1383277152.

Примечание. На самом деле я не могу сказать, почему, в частности, вы добавляете эти флаги. Я просмотрел репозиторий PyTorch, и не все флаги, которые вы получаете на своей цели, даже упоминаются в репозитории PyTorch. Некоторые из них (см. https://github.com/pytorch/pytorch/blob/main/CMakeLists.txt#L894 ), но они указаны там ( CMAKE_<LANG>_FLAGS ) не должны t распространяются на зависящие от ссылки цели любых целей PyTorch, и они даже указаны в блоке потока управления, который вводится только в том случае, если условие MSVC верно, что является правильным способом написать, что он там делает ( неправильно было бы использовать WIN32). ¯\_(ツ)_/¯

Другие вопросы по теме