在 Windows 7 上导入 Theano 时出现 g++ 错误
Posted
技术标签:
【中文标题】在 Windows 7 上导入 Theano 时出现 g++ 错误【英文标题】:g++ error on import of Theano on Windows 7 【发布时间】:2016-11-26 23:13:47 【问题描述】:我正在尝试根据the theano installation guide 使用正确的 g++ 安装进行设置。我以前让 theano 使用仅 python 的实现。我在 python 3.4 上使用他们的 git repo 中的 theano 的前沿版本。我尝试使用 theano 建议的 TDM-GCC-64 方法以及 MinGW,两者都导致完全相同的错误。 (复制尽可能可读)
Problem occurred during compilation with the command line below:
C:\MinGW\bin\g++.exe -shared -g -march=skylake -mmmx -mno-3dnow -msse -msse2 -msse3
-mssse3 -mno-sse4a -mcx16 -msahf -mmovbe -maes -mno-sha -mpclmul -mpopcnt
-mabm -mno-lwp -mfma -mno-fma4 -mno-xop -mbmi -mbmi2 -mno-tbm -mavx
-mavx2 -msse4.2 -msse4.1 -mlzcnt -mrtm -mhle -mrdrnd -mf16c -mfsgsbase
-mrdseed -mprfchw -madx -mfxsr -mxsave -mxsaveopt -mno-avx512f
-mno-avx512er -mno-avx512cd -mno-avx512pf -mno-prefetchwt1 -mclflushopt
-mxsavec -mxsaves -mno-avx512dq -mno-avx512bw -mno-avx512vl
-mno-avx512ifma -mno-avx512vbmi -mno-clwb -mno-pcommit -mno-mwaitx
-mno-clzero -mno-pku --param l1-cache-size=32 --param
l1-cache-line-size=64 --param l2-cache-size=8192 -mtune=skylake
-DNPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION -m64 -DMS_WIN64
-IC:\Python34_64bit\lib\site-packages\numpy\core\include
IC:\Python34_64bit\include -IC:\Python34_64bit\lib\site-packages\theano\gof
-o C:\Users\Jwely\AppData\Local\Theano\compiledir_Windows-7-6.1.7601-SP1-Intel64_Family_6_Model_94_Stepping_3_GenuineIntel-3.4.4-64\lazylinker_ext\lazylinker_ext.pyd
C:\Users\Jwely\AppData\Local\Theano\compiledir_Windows-7-6.1.7601-SP1-Intel64_Family_6_Model_94_Stepping_3_GenuineIntel-3.4.4-64\lazylinker_ext\mod.cpp
-LC:\Python34_64bit\libs -LC:\Python34_64bit -lpython34
In file included from c:\mingw\include\c++\6.1.0\math.h:36:0,
from C:\Python34_64bit\include/pyport.h:328,
from C:\Python34_64bit\include/Python.h:50,
from C:\Users\Jwely\AppData\Local\Theano\compiledir_Windows-7-6.1.7601-SP1-Intel64_Family_6_Model_94_Stepping_3_GenuineIntel-3.4.4-64\lazylinker_ext\mod.cpp:1:
c:\mingw\include\c++\6.1.0\cmath:1133:11: error: '::hypot' has not been declared
using ::hypot;
^~~~~
可能值得注意的是,在打印此错误之前,它会打印整个文件的代码,您可以在此处找到整个错误输出
我不确定接下来要尝试什么,我已经按照指示进行了两次,对某些依赖项使用了几种不同的安装方法,并确保在每次尝试和重新启动之间清理我的系统路径。
【问题讨论】:
【参考方案1】:这对我有用:
-
转到您的用户文件夹:C:/Users/[用户名]
如果 .theanorc 文件不存在,则创建它
确保它包含以下行:
[海合会] cxxflags = -D_hypot=hypot【讨论】:
不知道为什么这会被否决,很好的解决方案,除非我遗漏了什么。 我应该如何创建一个没有名称的文件? Windows 不允许我这样做。 啊,在这里找到了:***.com/questions/5004633/… 导出 CXXFLAGS=-D_hypot=hypot【参考方案2】:"Error: '::hypot' has not been declared" in cmath while trying to embed Python Error building Boost 1.49.0 with GCC 4.7.0
我的解决方案是注释掉所有的
#define hypot _hypot
pyconfig.h 文件中的宏
【讨论】:
这对我有用....但我想知道其他应用程序是否会因缺少“_hypot”而出现问题。【参考方案3】:这对我有用
-
转到
System properties/Advance system setting
添加你的 MinGW 安装路径,如果已经添加并且看起来像 C:\your MingW installation\bin
将其更改为C:\your MingW installation
【讨论】:
【参考方案4】:上面的答案可能是一个更好、更持久的解决方案。为了快速修复,以下内容对我有用:
import theano
theano.config.gcc.cxxflags = "-D_hypot=hypot"
...使用 Windows 10、Anaconda 4.4、Python 2.7、Theano v0.10.0.dev1、m2w64-toolchain v5.3.0
【讨论】:
如果添加引号,则会出现错误:g++.exe: error: "-D_hypot=hypot"。无效参数【参考方案5】:如果您无法创建名称为 .theanorc
的文件。
您可以在控制台中使用此代码,但在 C:/Users/[username]
中打开 cmd 之前,然后编写 python
然后将下面的代码粘贴到那里:
import os
with open(os.path.join(os.environ["USERPROFILE"], ".theanorc"), "w") as f:
f.write("[gcc]\ncxxflags = -D_hypot=hypot")
【讨论】:
【参考方案6】:首先,卸载所有 Theano 版本。
然后:
pip install pydot-ng
conda install mingw libpython
pip install git+https://github.com/Theano/Theano.git#egg=Theano
【讨论】:
以上是关于在 Windows 7 上导入 Theano 时出现 g++ 错误的主要内容,如果未能解决你的问题,请参考以下文章
在 Hadoop 2.7.3 上执行简单 SQOOP 导入命令时出现 Sqoop 错误
TensorFlow 1.0 在 Windows 上看不到 GPU(但 Theano 有)
Windows下基于AnacondaCUDAVS2013的Theano环境搭建