问题简述:
在某一项目 pyconfig 的 header file中遇到的问题,代码运行报错“cmath:1157:11: error: '::hypot' has not been declared”。
看源码可以看出导致问题出现的原因是:hypot
被某段代码重命名为了 _hypot,致使
cmath 调用 hypot 的时候无法找到
。
解决方法:
修改源码中的引入顺序,让include “math.h”的引入在include “Python”之前,让cmath在hypot被重命名之前调用hypot。
具体做法为:
方法1、修改Python.h的源码,在它的开头加上math.h的引入,修改结果如下所示
#ifndef Py_PYTHON_H
#define Py_PYTHON_H
/* Since this is a "meta-include" file, no #ifdef __cplusplus / extern "C" { */
/* Include nearly all Python header files */
#include "math.h"
方法2、调换include “math.h”和include “Python”的引入顺序。
详情见https://blog.csdn.net/limingaoyu/article/details/101424262
这个针对的报错是cmath:1096:11:error: '::hypot' has not been declared,与本文问题可能有差异,未确定是否能跑通。
详情见https://blog.csdn.net/weixin_37993251/article/details/88054384