win11 pytorch 进行C++编译时出现错误
- (python37) H:\emd>python setup.py install
- running install
- running bdist_egg
- running egg_info
- creating emd.egg-info
- writing emd.egg-info\PKG-INFO
- writing dependency_links to emd.egg-info\dependency_links.txt
- writing top-level names to emd.egg-info\top_level.txt
- writing manifest file 'emd.egg-info\SOURCES.txt'
- D:\Anaconda_app\envs\python37\lib\site-packages\torch\utils\cpp_extension.py:370: UserWarning: Attempted to use ninja as the BuildExtension backend but we
- could not find ninja.. Falling back to using the slow distutils backend.
- warnings.warn(msg.format('we could not find ninja.'))
- reading manifest file 'emd.egg-info\SOURCES.txt'
- writing manifest file 'emd.egg-info\SOURCES.txt'
- installing library code to build\bdist.win-amd64\egg
- running install_lib
- running build_ext
- D:\Anaconda_app\envs\python37\lib\site-packages\torch\utils\cpp_extension.py:305: UserWarning: Error checking compiler version for cl: [WinError 2] 系统找
- 不到指定的文件。
- warnings.warn(f'Error checking compiler version for {compiler}: {error}')
- building 'emd' extension
- creating build
- creating build\temp.win-amd64-3.7
- ……
- D:\Anaconda_app\envs\python37\lib\site-packages\torch\include\c10/util/Optional.h(427): note: 参见对正在编译的类 模板 实例化“OptionalBase<at::Tensor>”的
- 引用
- D:\Anaconda_app\envs\python37\lib\site-packages\torch\include\ATen/core/TensorBody.h(734): note: 参见对正在编译的类 模板 实例化“c10::optional<at::Tensor>
- ”的引用
- D:\Anaconda_app\envs\python37\lib\site-packages\torch\include\c10/util/Optional.h(395): warning C4624: “c10::trivially_copyable_optimization_optional_base
- <T>”: 已将析构函数隐式定义为“已删除”
- with
- [
- T=at::Tensor
- ]
- D:\Anaconda_app\envs\python37\lib\site-packages\torch\include\c10/util/Optional.h(476): warning C4814: “c10::optional<at::Tensor>::contained_val”: 在 C++
- 14 中,"constexpr" 将不表示“常量”;请考虑显式指定“常量”
- D:\Anaconda_app\envs\python37\lib\site-packages\torch\include\c10/util/Optional.h(477): error C2556: “at::Tensor &c10::optional<at::Tensor>::contained_val
- (void) const &”: 重载函数与“const at::Tensor &c10::optional<at::Tensor>::contained_val(void) const &”只是在返回类型上不同
- D:\Anaconda_app\envs\python37\lib\site-packages\torch\include\c10/util/Optional.h(471): note: 参见“c10::optional<at::Tensor>::contained_val”的声明
- D:\Anaconda_app\envs\python37\lib\site-packages\torch\include\c10/util/Optional.h(477): error C2373: “c10::optional<at::Tensor>::contained_val”: 重定义;
- 不同的类型修饰符
- D:\Anaconda_app\envs\python37\lib\site-packages\torch\include\c10/util/Optional.h(471): note: 参见“c10::optional<at::Tensor>::contained_val”的声明
- D:\Anaconda_app\envs\python37\lib\site-packages\torch\include\c10/util/Optional.h(476): warning C4814: “c10::optional<int64_t>::contained_val”: 在 C++14
- 中,"constexpr" 将不表示“常量”;请考虑显式指定“常量”
- D:\Anaconda_app\envs\python37\lib\site-packages\torch\include\ATen/core/TensorBody.h(774): note: 参见对正在编译的类 模板 实例化“c10::optional<int64_t>”的
- 引用
- D:\Anaconda_app\envs\python37\lib\site-packages\torch\include\c10/util/Optional.h(477): error C2556: “int64_t &c10::optional<int64_t>::contained_val(void)
- const &”: 重载函数与“const int64_t &c10::optional<int64_t>::contained_val(void) const &”只是在返回类型上不同
- D:\Anaconda_app\envs\python37\lib\site-packages\torch\include\c10/util/Optional.h(471): note: 参见“c10::optional<int64_t>::contained_val”的声明
- D:\Anaconda_app\envs\python37\lib\site-packages\torch\include\c10/util/Optional.h(477): error C2373: “c10::optional<int64_t>::contained_val”: 重定义;不
- 同的类型修饰符
- D:\Anaconda_app\envs\python37\lib\site-packages\torch\include\c10/util/Optional.h(471): note: 参见“c10::optional<int64_t>::contained_val”的声明
- D:\Anaconda_app\envs\python37\lib\site-packages\torch\include\c10/util/Optional.h(477): fatal error C1003: 错误计数超过 100;正在停止编译
- error: command 'D:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\BIN\\x86_amd64\\cl.exe' failed with exit status 2
-
-
关键错误 1.:UserWarning: Error checking compiler version for cl: [WinError 2] 系统找
不到指定的文件。
定位位置:D:\Anaconda_app\envs\python37\lib\site-packages\torch\utils\cpp_extension.py:305行
看看这个地方怎么有错误:
- try:
- if sys.platform.startswith('linux'):
- minimum_required_version = MINIMUM_GCC_VERSION
- versionstr = subprocess.check_output([compiler, '-dumpfullversion', '-dumpversion'])
- version = versionstr.decode().strip().split('.')
- else:
- minimum_required_version = MINIMUM_MSVC_VERSION
- compiler_info = subprocess.check_output(compiler, stderr=subprocess.STDOUT)
- match = re.search(r'(\d+)\.(\d+)\.(\d+)', compiler_info.decode().strip())
- version = (0, 0, 0) if match is None else match.groups()
- except Exception:
- _, error, _ = sys.exc_info()
- warnings.warn(f'Error checking compiler version for {compiler}: {error}')
- return False
不是在linux平台,而是win平台,于是找到cl.exe的版本要求:
MINIMUM_MSVC_VERSION = (19, 0, 24215)# 这个在程序里面,txt文件打开,选定它,通过查找可以找到这个地方。
MSVC是一个编译器,其编译器名字叫"cl.exe",它是微软专为VS开发的一款编译器。
上面语句写了 MSVC 最低的版本要求MSVC 19.0.24215.
MSC_VER的意思就是:Microsoft 的 C 编译器的版本
- MSC 1.0 _MSC_VER == 100
- MSC 2.0 _MSC_VER == 200
- MSC 3.0 _MSC_VER == 300
- MSC 4.0 _MSC_VER == 400
- MSC 5.0 _MSC_VER == 500
- MSC 6.0 _MSC_VER == 600
- MSC 7.0 _MSC_VER == 700
- MSVC++ 1.0 _MSC_VER == 800
- MSVC++ 2.0 _MSC_VER == 900
- MSVC++ 4.0 _MSC_VER == 1000 (Developer Studio 4.0)
- MSVC++ 4.2 _MSC_VER == 1020 (Developer Studio 4.2)
- MSVC++ 5.0 _MSC_VER == 1100 (Visual Studio 97 version 5.0)
- MSVC++ 6.0 _MSC_VER == 1200 (Visual Studio 6.0 version 6.0)
- MSVC++ 7.0 _MSC_VER == 1300 (Visual Studio .NET 2002 version 7.0)
- MSVC++ 7.1 _MSC_VER == 1310 (Visual Studio .NET 2003 version 7.1)
- MSVC++ 8.0 _MSC_VER == 1400 (Visual Studio 2005 version 8.0)
- MSVC++ 9.0 _MSC_VER == 1500 (Visual Studio 2008 version 9.0)
- MSVC++ 10.0 _MSC_VER == 1600 (Visual Studio 2010 version 10.0)
- MSVC++ 11.0 _MSC_VER == 1700 (Visual Studio 2012 version 11.0)
- MSVC++ 12.0 _MSC_VER == 1800 (Visual Studio 2013 version 12.0)
- MSVC++ 14.0 _MSC_VER == 1900 (Visual Studio 2015 version 14.0)
- MSVC++ 14.1 _MSC_VER == 1910 (Visual Studio 2017 version 15.0)
- MSVC++ 14.11 _MSC_VER == 1911 (Visual Studio 2017 version 15.3)
- MSVC++ 14.12 _MSC_VER == 1912 (Visual Studio 2017 version 15.5)
- MSVC++ 14.13 _MSC_VER == 1913 (Visual Studio 2017 version 15.6)
- MSVC++ 14.14 _MSC_VER == 1914 (Visual Studio 2017 version 15.7)
- MSVC++ 14.15 _MSC_VER == 1915 (Visual Studio 2017 version 15.8)
- MSVC++ 14.16 _MSC_VER == 1916 (Visual Studio 2017 version 15.9)
- MSVC++ 14.2 _MSC_VER == 1920 (Visual Studio 2019 Version 16.0)
- MSVC++ 14.21 _MSC_VER == 1921 (Visual Studio 2019 Version 16.1)
- MSVC++ 14.22 _MSC_VER == 1922 (Visual Studio 2019 Version 16.2)
注意这是它要求的最低版本,如果你安装vs2019,2022,在安装的地方有cl.exe。需要搜索一下,然后把cl.exe所在的路径添加到系统环境变量中,也就是path中,别忘了重启电脑。问题解决
第一步解决。
错误 2.D:\Anaconda_app\envs\python37\lib\site-packages\torch\utils\cpp_extension.py:370: UserWarning: Attempted to use ninja as the BuildExtension backend but we could not find ninja… Falling back to using the slow distutils backend.
没有安装 ninja...。这个ninja是什么东东,这里不管一会安装上就行
如何安装ninja
pip install ninja
运行结果
- Looking in indexes: https://pypi.org/simple, https://pypi.ngc.nvidia.com
- Collecting ninja
- Downloading ninja-1.11.1-py2.py3-none-win_amd64.whl (313 kB)
- |████████████████████████████████| 313 kB 939 kB/s
- Installing collected packages: ninja
- Successfully installed ninja-1.11.1