错误建筑升压1.49.0与海湾合作委员会4.7.0(Error building Boost 1.4

2019-06-24 13:53发布

我试图建立使用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 ),以及一个似乎高兴。

任何想法,为什么我收到此错误?

Answer 1:

通过@Praetorian答案正确识别的问题。 在另一方面,Python的头在技术上意味着任何来别人面前。 此外,有时接受的解决方案不工作或处于构建系统不方便,所以我想出了一个替代的解决方案。 下列标志添加到调用G ++:

-D_hypot=hypot

这使得它,以便在Python头中的有害宏变成了无操作,并且编译错误消失。



Answer 2:

发现在回答这个论坛的帖子 。 看来pyconfig.h有下面几行:

#if defined(__GNUC__) && defined(_WIN32)
// ...
#define hypot _hypot
// ...
#endif /* GNUC */

但包含MinGW的CMATH预计该功能将被命名hypot_hypot ,这会导致编译错误。

整个解决方案包括以下我的bjam命令行的CXXFLAGS选项

bjam ... cxxflags="-include cmath "

这表明,克++应包括在每个源文件的开头的标题CMATH。



Answer 3:

据我可以看到使用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 >


Answer 4:

问题是由@Praetorian正确识别。

在我的情况只出现在一个file.So我只需添加

#define _hypot hypot之前#include <Python.h>

和作品。

希望这能有所启发。



Answer 5:

尝试寻找在预处理单元。 我猜你会发现像“和#undef hypot将”。



Answer 6:

当我在链接中添加以下路径,我可以解决代码块这个错误

C:\Python36-32\libs 

并把链接库中的两个库:libpython36.apython36.lib。



Answer 7:

添加此行

#define _hypot hypot

在第一你的Python.h ,它被保存在你的Python安装目录中的文件。 喜欢的地方C:\Python27\include



文章来源: Error building Boost 1.49.0 with GCC 4.7.0
标签: c++ boost mingw