Я пытался использовать версию 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} ]
@Friedrich Дело в том, что Libtorch не поддерживает компилятор Mingw32, и мне нужно скомпилировать с помощью MSVC?
об этом в основном спрашивали раньше: Причина ошибки сборки cmake при поиске файлов g++.exe с использованием Windows и Mingw (установка Libtorch)?, но я отвечу здесь, так как я думаю, что этот вопрос немного лучше задан, и там еще нет поста с ответом.





На момент написания этой статьи сборка 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). ¯\_(ツ)_/¯
Все параметры, которые вы видите от
/Z7до/bigobj, являются параметрами cl.exe MSVC, а не g++. Я не понимаю, откуда это взялось, но где-то в цепочке сборки предполагается, что вы используете компилятор Microsoft, а не GCC.