我正在使用GCC 4.7.0(MinGW)构建Boost 1.49.0.我收到以下错误信息几十次:
c:\tools\mingw\bin../lib/gcc/i686-pc-mingw32/4.7.0/../../../../include/c++/4.7.0/cmath:1096:11: error: ‘::hypot’ has not been declared
cmath的第1096行包含
using ::hypot;
extern double __cdecl hypot (double,double); /* in libmoldname.a */
在两个文件中,上面引用的几行都是相同的用于hypotl函数的语句(除了类型是long double而不是double),而且似乎很开心.
任何想法为什么我得到这个错误?
解决方法
@H_404_21@ 找到答案在 this forum post.似乎pyconfig.h有以下几行:#if defined(__GNUC__) && defined(_WIN32) // ... #define hypot _hypot // ... #endif /* GNUC */
但是MinGW中包含的cmath会将函数命名为hypot而不是_hypot,这会导致编译错误.
修复是将以下内容添加到我的bjam命令行的cxxflags选项中
bjam ... cxxflags="-include cmath "
这表示g应该在每个源文件的开始处包含cmath头.