我试图建立使用GCC 4.7.0(MinGW的)升压1.49.0。 我不断收到以下错误消息数十倍:
C:\工具\ mingw的\ BIN ../ LIB / GCC / i686的-PC-的mingw32 / 4.7.0 /../../../../包括/ C ++ / 4.7.0 / CMATH:1096:11 :错误:“:: hypot将”尚未声明
1096线cmath
包含
using ::hypot;
cmath
包括math.h
,其声明了hypot
功能作为
extern double __cdecl hypot (double, double); /* in libmoldname.a */
在这两个文件中,一对夫妇上面引述的那些后线,是相同的语句hypotl
功能(除了类型是long double
,而不是double
),以及一个似乎高兴。
任何想法,为什么我收到此错误?
通过@Praetorian答案正确识别的问题。 在另一方面,Python的头在技术上意味着任何来别人面前。 此外,有时接受的解决方案不工作或处于构建系统不方便,所以我想出了一个替代的解决方案。 下列标志添加到调用G ++:
-D_hypot=hypot
这使得它,以便在Python头中的有害宏变成了无操作,并且编译错误消失。
发现在回答这个论坛的帖子 。 看来pyconfig.h有下面几行:
#if defined(__GNUC__) && defined(_WIN32)
// ...
#define hypot _hypot
// ...
#endif /* GNUC */
但包含MinGW的CMATH预计该功能将被命名hypot
不_hypot
,这会导致编译错误。
整个解决方案包括以下我的bjam命令行的CXXFLAGS选项
bjam ... cxxflags="-include cmath "
这表明,克++应包括在每个源文件的开头的标题CMATH。
据我可以看到使用MinGW编译时,使用-std = C ++ 0XX,并且包括Python.h CMATH之前发生这种情况。 并注意CMATH被不少其他包含的头文件...请注意,这个问题是不是升压具体。 复杂化的事实是,在我的标准的MingW - Visual Studio的交叉编译设置,Visual Studio 2010只中需要在调试模式下有Python.h包括以前很多其他标准包括文件。 解决办法是包括CMATH第一,其次是Python.h,所以你得到这样的代码:
#include <cmath>
#include <Python.h>
#include < other standard headers >
问题是由@Praetorian正确识别。
在我的情况只出现在一个file.So我只需添加
#define _hypot hypot
之前#include <Python.h>
和作品。
希望这能有所启发。
尝试寻找在预处理单元。 我猜你会发现像“和#undef hypot将”。
当我在链接中添加以下路径,我可以解决代码块这个错误
C:\Python36-32\libs
并把链接库中的两个库:libpython36.a和python36.lib。
添加此行
#define _hypot hypot
在第一你的Python.h
,它被保存在你的Python安装目录中的文件。 喜欢的地方C:\Python27\include
。